Для вызова требуется уровень API 11 (текущий мин - 8) android.app.Activity # onCreateView

Я новичок в android, и я разрабатываю приложение для Android. Но моя строка пакета дает эту ошибку в классе MainActivity.java. Может ли кто-нибудь рассказать мне причину этого?. Это мой класс, и строка пакета дает эту ошибку.

package com.example.eventgyaam;


import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity  {

int counter;

Button add,sub;
TextView display;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    counter = 0;
    add = (Button) findViewById(R.id.bAdd);
    sub = (Button) findViewById(R.id.bSub);
    display = (Button) findViewById(R.id.tvDisplay);
    add.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            counter++;
            display.setText("Your total is "+counter);
        }
    });
    sub.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            counter--;
            display.setText("Your total is "+counter);
        }
    });

}
}

Ответ 1

Во-первых, некоторые вводные детали. Существуют уровни API Android, и на каждом уровне они могут вводить новые функции, как здесь.

Когда вы создаете приложение для Android, вы указываете минимальный уровень, на котором будет работать ваше приложение. Это делается в manifest с строкой uses-sdk: подробнее см. здесь.

Итак, если вы используете функциональные возможности, доступные только на уровне 11, ваш код не будет работать на API уровня 8, как вы указали.

Вы либо должны использовать только то, что доступно на вашем текущем минимуме, или минимум.

Что касается того, почему вы, кажется, получаете ошибку в строке пакета, а для вызова, который, похоже, не находится в исходном коде, который вы нам показали, я не мог сказать. Поскольку он жалуется на android.app.Activity#onCreateView в соответствии с вашим названием, может возникнуть проблема с представлением R.layout.activity_main, которое накачивается setContentView. Или это может быть проблема с самой библиотекой совместимости, то, что не неслыханно.

Однако, вместо того, чтобы слишком сильно бороться с этим, вам может потребоваться просто увеличить минимальный уровень до API-11 и полностью удалить материал appcompat. Согласно здесь, только около 2% пользователей Android все еще вернулись к релизам ранее, чем Android-3.0/API-11 (по состоянию на июнь 2016 года), Это будет скорее всего уменьшаться с течением времени.

Ответ 2

Для каждого Android API могут быть добавлены новые функции, которые не могут работать в более низких версиях API. Таким образом, чтобы исправить это, вы можете просто увеличить минимально необходимый API в своем проекте.

В build.gradle (app-module) вы найдете эту строку:

minSdkVersion 8

Измените его на:

minSdkVersion 11

Если вы не нашли эту строку в build.gradle, проверьте AndroidManifest.xml и измените minSdkVersion с 8 на 11 или все, что вы хотите:

<uses-sdk
    android:minSdkVersion="11" />

Но теперь ваше приложение будет работать только с API 11+, и это нормально. В наши дни никто не использует API API, поэтому для вас это не должно быть проблемой.

Ответ 3

Ошибка:

Для вызова требуется уровень API 11 (текущий мин - 8) android.app.Activity # onCreateView

Если вы посмотрите на javadoc для класса Activity, вы увидите, что метод public View onCreateView (View parent, String name, Context context, AttributeSet attrs) был добавлен в API 11, поэтому вы получаете эту ошибку.

Либо вы должны изменить свой minSdkVersion с 8 на 11

Или вы используете @SuppressLint("NewApi") на уровне объявления класса как обходной путь для Activity следующим образом:

@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {

Для Fragment:

@SuppressLint("NewApi")
@Override
public void View onCreateView(String name, Context context, AttributeSet attrs) {

@SuppressLint("NewApi") - аннотация, используемая инструментом Android Lint.

Lint скажет вам, когда что-то в вашем коде не является оптимальным или может упасть. Пропуская здесь NewApi, вы подавляете все предупреждения, которые расскажут вам, используете ли вы какой-либо API, введенный после вашего minSdkVersion

EDIT:

Вы также можете использовать @TargetApi(11) вместо @SuppressLint("NewApi"). Больше различий между ними можно найти здесь.

Надеюсь, что это поможет!

Ответ 4

Поскольку фрагменты, добавленные в API 11 и ваш текущий minSDK = 8, вы можете видеть, что здесь

Вы используете AppCompatActivity, который вызывает класс Fragment в методе onCreateView(), хотя ваш код не реализует onCreateView(), но AppCompatActivity делает. вы можете прочитать исходный код здесь

Решение существует два возможных решения

1- изменить версию sdk в манифесте нa >= 11

2- (если вы используете API ниже 11), используйте аннотацию SuppressLint для подавления любой ошибки, связанной с sdkVersion, и реализуйте onCreateView следующим образом

@SuppressLint("NewApi")
public View onCreateView(View parent, String name, Context context, AttributeSet attrs)
{
    if (Build.VERSION.SDK_INT >= 11) 
        return super.onCreateView(parent, name, context, attrs);
    return null;
}

Ответ 5

измените вашу minsdkversion из manifest.xml

<uses-sdk
    android:minSdkVersion="11"/>

Ответ 6

Я столкнулся с той же проблемой, и решил ее, изменив суперкласс моей деятельности. Insted из "общедоступного класса MainActivity расширяет AppCompatActivity", Я набрал "public class MainActivity extends Activity". После изменения проблема была решена.

Ответ 7

Если вы используете Eclipse, щелкните правой кнопкой мыши на одном из ваших проектов и щелкните свойства, выберите Java Compiler из списка слева, снимите флажок "Включить специальные настройки проекта", нажмите ссылку "Настройка параметров рабочей области", измените уровень соответствия компилятора на самую высокую версию (на данный момент это 1.8). затем нажмите "ОК" и примите все, что он попросит.

Также, чтобы убедиться, измените Project Build Target api всех ваших проектов на самый последний api.

EDIT: Я лично должен был снять флажок "Включить конкретные настройки проекта" для всех проектов библиотеки один за другим. изменил уровень соответствия компилятора рабочей области на 1.8, а затем "Включить конкретные настройки проекта" только для моего основного проекта и изменил его уровень соответствия компилятора на 1.6.