Unable to start activity Resources$NotFoundException
Habe ich eine app veröffentlicht und bei google play für mehrere Monate.
Heute erhielt ich eine Fehlermeldung von einem Benutzer mit einer Ressource, die nicht gefunden Ausnahme. Ich dachte ich kann vergessen haben, einige drawable. Aus dem Fehler hab ich die Objekt-ID (ich habe ID 0x7f030003
aus dem Fehler) und sah es in R.java um zu bestimmen, welcher Gegenstand fehlte.
Zu meiner überraschung fand ich, dass die IDis aus meiner Haupttätigkeit, also ich bin sicher, ich habe nicht vergessen diese!
Meine app startet mit Haupt-und alle anderen Aktivitäten/Fragmente genannt werden von ihm. Beim gehen zurück beende ich gerade geöffnet Aktivitäten und gehen Sie zurück zu Main. Es gibt also keine expliziten Aufruf von Main aus meinem code, so bin ich verloren, über das, was dies verursachen.
Kann ich nicht reproduzieren und habe nur den Bericht aus der user.
Habe ich einige Fehler suchen, die für die Ressource? was kann passiert sein? hier ist die Fehlermeldung, die ich erhalten über die Konsole
java.lang.RuntimeException: Unable to start activity
> ComponentInfo{com.myapp/com.myapp.MainActivity}:
> android.content.res.Resources$NotFoundException: Resource ID
> #0x7f030003 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
> at
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
> at android.app.ActivityThread.access$2300(ActivityThread.java:125) at
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
> at android.os.Handler.dispatchMessage(Handler.java:99) at
> android.os.Looper.loop(Looper.java:123) at
> android.app.ActivityThread.main(ActivityThread.java:4627) at
> java.lang.reflect.Method.invokeNative(Native Method) at
> java.lang.reflect.Method.invoke(Method.java:521) at
> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
> at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) at
> dalvik.system.NativeStart.main(Native Method) Caused by:
> android.content.res.Resources$NotFoundException: Resource ID
> #0x7f030003 at android.content.res.Resources.getValue(Resources.java:892) at
> android.content.res.Resources.loadXmlResourceParser(Resources.java:1869)
> at android.content.res.Resources.getLayout(Resources.java:731) at
> android.view.LayoutInflater.inflate(LayoutInflater.java:318) at
> android.view.LayoutInflater.inflate(LayoutInflater.java:276) at
> com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
> at android.app.Activity.setContentView(Activity.java:1647) at
> com.myapp.MainActivity.onCreate(MainActivity.java:48) at
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
> at
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
> ... 11 more
Dies ist mein main oncreate().
Grundsätzlich habe ich ein layout, das ich als splash-screen. Der timer löst einen anderen thread kann ich laden grundlegenden Sachen, während ich die Aktualisierung eines status bar im splash-screen.
sobald Sie fertig sind die Spritzen gesetzt ist Weg und das Hauptmenü sichtbar ist.
Wenn MyApp ist zerstört durch das OS meine Boolean-variable "inicializado" null ist, und dann hab ich auf neu laden meine Sachen.Das ist, warum ich es verwenden, um zu zeigen oder nicht zu den splash -
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
splashProgress = (ProgressBar) findViewById(R.id.mainSplash_pb_progressBar);
splashDescProgress = (TextView) findViewById(R.id.mainSplash_tv_descProgreso);
PACKAGE_NAME = MyApp.getContext().getPackageName();
media_btnClick = MediaPlayer.create(this, R.raw.btn_click);
if (savedInstanceState == null) {
TextView mi_textView = (TextView) findViewById(R.id.main_tv_Version);
PackageInfo mi_packageInfo = null;
try {
mi_packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
mi_textView.setText("v" + mi_packageInfo.versionName);
PACKAGE_CODE = mi_packageInfo.versionCode;
} catch (NameNotFoundException e) {
//TODO Auto-generated catch block
}
savedInstanceStateNull = true;
} else {
savedInstanceStateNull = false;
}
if (!MyApp.Inicializado) {
cargarDatosSplash();
Timer timer = new Timer();
timer.schedule(new LanzarInicio(), 10);
} else {
LinearLayout layoutSplash = (LinearLayout) findViewById(R.id.main_splash);
LinearLayout layoutMain = (LinearLayout) findViewById(R.id.main_menu);
layoutSplash.setVisibility(View.GONE);
layoutMain.setVisibility(View.VISIBLE);
}
}
class LanzarInicio extends TimerTask {
public void run() {
MainActivity.this.runOnUiThread(new Runnable() {
public void run() {
new cargarObjetosTask().execute();
}
});
}
}
- Posten Sie Ihre
Activity
code, speziellonCreate()
- Methode, 48 Linie verursacht problem. - Hallo, ich habe aktualisiert mein Antwort mit der onCreate-code. Ich habe keine Zeile 48 whitin die Methode. Diese Zeilennummer ist von Anfang an? Von Anfang Zeile 48 ist setContentView(R. layout.activity_main);
- Wissen Sie, das Gerät Ihrer Benutzer?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihre Tätigkeit locked in rotation, fügen Sie diese zu dem manifest:
Dieselbe Lösung wie die Antwort von diese Frage.
Ich hatte dein problem in einem anderen seltsamen situation, an der gleichen Stelle
setContentView(R.layout.activity_main);
Meine app gesperrt ist im Querformat. Das erste mal
OnCreate
heißt alles ist in Ordnung; das zweite mal (es passiert einfach nach dem drücken der Taste, um den Bildschirm auszuschalten, zum Beispiel), liest das Gerät die Orientierung Staat, und scheint, dass es sieht für eine Ressource im portrait-Modus, den ich nicht habe (weil ich Sie nicht brauche). Ich kam zu diesem Schluss, weil eine andere Lösung ist das hinzufügen der zugehörigen layout das "layout" (ich war nur mit Hilfe der "layout-land" - Verzeichnis) - Ressourcen-Verzeichnis.Könnte es ein problem in Bezug auf spezifische (und vielleicht alte) Geräte.
layout
res ist die beste Lösung. Einfach hinzufügenandroid:configChanges="orientation"
zu dem manifest nur wirft eine ganze Menge andere potenzielle Probleme, wie beschrieben, in der akzeptierten Antwort hier : stackoverflow.com/questions/7818717/...Stellen Sie sicher, dass ein layout an die Bildschirmgröße des Geräts, die Sie testen wollen. ie prüfen Sie, ob Sie schon eine splashscreen.xml layout in res/drawable-mdpi für kleine Geräte.