2015-08-24 12 views
10

Jestem początkującym użytkownikiem Androida i opracowuję aplikację na Androida. Ale moja linia pakietów podaje ten błąd w klasie MainActivity.java. Czy ktoś mógłby mi powiedzieć, dlaczego? To jest moja klasa, a linia pakietu podaje ten błąd.Połączenie wymaga poziomu interfejsu API 11 (bieżący min to 8) android.app.Activity # onCreateView

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); 
     } 
    }); 

} 
} 
+0

możesz opublikować realizacji działania, jak również pliku build.gradle dla modułu? – vman

+1

To jest błąd Androida SDK. Zalecam umieszczenie go [tutaj] (https://code.google.com/p/android/issues/detail?id=188677), aby pomóc programistom dowiedzieć się, ile osób dotyczy ten problem. – nkorth

Odpowiedz

3

pierwsze, dane wstępne. Istnieją poziomy Androida API i na każdym poziomie mogą wprowadzać nowe funkcje, zgodnie z here.

Podczas tworzenia aplikacji dla systemu Android określasz minimalny poziom, na którym aplikacja będzie działać. Odbywa się to w manifest strofie uses-sdk: patrz here w celu uzyskania szczegółowych informacji.

Tak więc, jeśli używasz funkcji, która jest dostępna tylko na poziomie 11, Twój kod nie będzie działał na API poziomu 8, jak to określiłeś.

Musisz użyć tylko tego, co jest dostępne przy obecnym minimum lub minimum.

Jeśli chodzi o przyczynę pojawienia się błędu w linii pakietowej, a także dla połączenia, które nie wydaje się znajdować w kodzie źródłowym, który nam pokazałeś, nie mogłem powiedzieć. Ponieważ narzeka na to, że jest to android.app.Activity#onCreateView, może to być problem z widokiem R.layout.activity_main, który jest zawyżany przez setContentView. Lub może to być problem z samą biblioteką kompatybilności, something that's not unheard of.

Jednak zamiast walczy zbyt ciężko z tym, może warto rozważyć po prostu zarozumiały minimalnej do API-11 i upuszczenie appcompat rzeczy w ogóle. Według stanu na here tylko około 2% użytkowników Androida nadal jest w wersjach wcześniejszych niż Android-3.0/API-11 (stan na czerwiec 2016 r.). Z biegiem czasu może się to zmniejszyć.

+9

Ta odpowiedź jest błędna, wygląda na to, że nie przeczytałeś pytania. W jego kodzie nie ma żadnej funkcjonalności, której używa na poziomie 11 APi. Po aktualizacji sdk otrzymuję ten sam błąd, wygląda na to, że jest błąd z ich nowym sdk. – user65721

+0

@ user65721, w kodzie również nie ma żadnego oncreateview, na co składa się komunikat o błędzie. Nie oświadczałem o podanym kodzie, tylko o tym, jak działały poziomy interfejsu API. Jeśli potrafisz wskazać na * określone * moje zdanie, które jest błędne (zamiast błędnego odczytania odpowiedzi), z chęcią je naprawię. – paxdiablo

+3

@ paxdiablo przepraszam za moje słabe sformułowanie, co mam na myśli to, że twój post nie odpowiada na pytanie, twoje wypowiedzi są poprawne i pomocne, ale nie jest poprawna odpowiedź na to pytanie. – user65721

0

zmiana Twój minsdkversion z manifest.xml

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

Dla każdego interfejsu API systemu Android mogą być dodawane nowe funkcje, które nie działają w wersjach niższych wersji interfejsu API. Aby to naprawić, możesz po prostu zwiększyć minimalną wymaganą API w swoim projekcie.

w twojej build.gradle (app-module) znajdziesz tę linię:

minSdkVersion 8 

go zmienić na:

minSdkVersion 11 

Jeśli nie znalazłeś tego wiersza w build.gradle, sprawdź AndroidManifest.xml i zmienić minSdkVersion od 8 do 11 lub cokolwiek chcesz:

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

Ale teraz twoja aplikacja działa tylko na API 11+, co jest w porządku. Nikt nie korzysta z API 11 poniżej, więc nie powinno to stanowić problemu.

+1

Cóż, 5% wciąż używa pre-3.0, ale jest wystarczająco blisko zera (i prawdopodobnie się zmniejsza, gdy ludzie aktualizują swoje telefony) pod względem decyzji marketingowej :-) – paxdiablo

+0

@paxdiablo w moim kraju, ludzie używający pre-3.0 około 30% użytkowników Androida (poziom API 10) to – EpicPandaForce

+0

Po prostu epickie, ale deweloperzy mobilni rzadko celują w jeden kraj, są bardziej zainteresowani rynkiem światowym, zwłaszcza za 0,99 USD :-) – paxdiablo

5

Błąd:

Call requires API level 11(current min is 8) android.app.Activity#onCreateView

Jeśli spojrzeć na javadoc dla klasy Aktywny zobaczysz, że metoda public View onCreateView (View parent, String name, Context context, AttributeSet attrs) dodano API 11, dlatego otrzymujesz ten błąd.

Albo trzeba zmienić swój minSdkVersion z 8 do 11

Albo użyć @SuppressLint("NewApi") na poziomie deklaracji klasy jako obejście Activity tak:

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

Dla Fragment:

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

@SuppressLint("NewApi") to adnotacja używany przez narzędzie Android Lint.

Lint powie ci, gdy coś w twoim kodzie nie jest optymalne lub może się zawiesić. Przekazując tam NewApi, jesteś tłumiąc wszelkie ostrzeżenia, że ​​powie ci, jeśli używasz żadnego API wprowadzony po minSdkVersion

EDIT:

Można również użyć @TargetApi(11) zamiast @SuppressLint("NewApi"). Więcej różnic między nimi można znaleźć here.

Mam nadzieję, że pomoże!

+1

Jestem zupełnie nowy z Androidem .... ale z zasady "tłumienie błędów" nie jest dobrym pomysłem, zwłaszcza podczas rozwoju – dsdsdsdsd

+1

również ... +1 dla wyjaśnienia na temat "klasy aktywności" ... ... ale pytanie : czy to nie oznacza, że ​​metoda 'onCreate' (która widocznie rozszerza' onCreateView') jest bezużyteczna dla API <11 ?? ... dzięki. – dsdsdsdsd

+0

@dsdsdsdsd dodałem onCreateView for Fragment, ponieważ nie ma metody onCreate w Fragment – Rajesh

0

Zmierzyłem się z tym samym problemem i rozwiązałem go, zmieniając nadklasę mojej działalności. Zainstalowane z "klasy publicznej MainActivity rozszerza AppCompatActivity", Napisałem "Klasa publiczna MainActivity rozszerza aktywność". Po zmianie problem został rozwiązany.

+0

Czy to pełna odpowiedź? – manetsus

+0

To rozwiązuje problem. Po rozszerzeniu działania przenieśliśmy się do AppCompatActivity w celu uzyskania wstecznej zgodności nowszych funkcji i sugerujemy pozostawienie ich w całości i pracę z tym samym starym działaniem. – user2779311

0

Jeśli korzystasz z Eclipse, kliknij prawym przyciskiem myszy na jednym ze swoich projektów i kliknij właściwości, wybierz Kompilator Java z lewej listy, odznacz "Włącz specyficzne ustawienia projektu", kliknij łącze Konfiguruj ustawienia obszaru roboczego, zmień poziom zgodności Kompilatora na najwyższy wersja (na razie jest 1.8). , a następnie kliknij OK i zaakceptuj wszystko, o co poprosiłeś.

Aby się upewnić, zmień api Project Build Target wszystkich swoich projektów na najnowsze api.

EDYCJA: Ja osobiście musiałem odznaczyć "Włącz ustawienia specyficzne dla projektu" dla wszystkich projektów bibliotecznych jeden po drugim. zmienił poziom zgodności Compiler obszaru roboczego na 1.8, a następnie zaznaczył opcję "Włącz ustawienia specyficzne dla projektu" tylko dla mojego własnego projektu głównego i zmienił poziom zgodności kompilatora na 1.6.

1

Ponieważ fragmenty dodane w API 11 i aktualnej minSDK = 8, można zobaczyć, że here

Twój używasz AppCompatActivity który wywołuje klasę fragmentem onCreateView() metoda, Chociaż kod nie realizuje onCreateView() ale działa AppCompatActivity.można odczytać kodu źródłowego here

Rozwiązanie Istnieją dwa możliwe rozwiązania

1- Zmień wersję SDK manifest do> = 11

2- (jeśli używasz interfejsu API poniżej 11) Używać SuppressLint Adnotacja stłumić żadnego błędu związanego sdkVersion i wdrożenie onCreateView następująco

@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; 
} 
Powiązane problemy