1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Sound auswählen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von The_S, 11.02.2011.

  1. The_S, 11.02.2011 #1
    The_S

    The_S Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    105
    Erhaltene Danke:
    10
    Registriert seit:
    07.01.2010
    Hallo,

    der Benutzer meiner App soll einen Ton auswählen. Hierzu verwende ich in der onClick-Methode folgenden Code:

    Code:
    startActivityForResult(new Intent(RingtoneManager.ACTION_RINGTONE_PICKER), RINGTONE_PICKER);
    meine onActivityResult-Methode sieht wie folgt aus:

    Code:
    	@Override
    	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    		if (requestCode == RINGTONE_PICKER) {
    			if (resultCode == RESULT_OK && data.hasExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI)) {
    				Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
    				sound.setText(uri.toString());
    			}
    		}
    		super.onActivityResult(requestCode, resultCode, data);
    	}
    Nachdem ich den Auswahldialog bestätigt habe, erhalte ich beim Aufruf von uri.toString() eine NullPointerException und meine App stürzt ab:

    Code:
    02-11 13:59:14.402: ERROR/AndroidRuntime(938): FATAL EXCEPTION: main
    02-11 13:59:14.402: ERROR/AndroidRuntime(938): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=3, result=-1, data=Intent { (has extras) }} to activity {meinpackage/meinpackage.MeineActivity}: java.lang.NullPointerException
    02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3515)
    02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3557)
    02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at android.app.ActivityThread.access$2800(ActivityThread.java:125)
    02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2063)
    02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at android.os.Handler.dispatchMessage(Handler.java:99)
    02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at android.os.Looper.loop(Looper.java:123)
    02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at android.app.ActivityThread.main(ActivityThread.java:4627)
    02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at java.lang.reflect.Method.invokeNative(Native Method)
    02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at java.lang.reflect.Method.invoke(Method.java:521)
    02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at dalvik.system.NativeStart.main(Native Method)
    02-11 13:59:14.402: ERROR/AndroidRuntime(938): Caused by: java.lang.NullPointerException
    02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at meinpackage.activities.MeineActivity.onActivityResult(AddAlarmActivity.java:90)
    02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at android.app.Activity.dispatchActivityResult(Activity.java:3890)
    02-11 13:59:14.402: ERROR/AndroidRuntime(938):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3511)
    02-11 13:59:14.402: ERROR/AndroidRuntime(938):     ... 11 more
    Ein paar Sekunden später erhalte ich noch folgende Warnung:

    Code:
    02-11 13:59:40.672: WARN/SQLiteCompiledSql(200): Releasing statement in a finalizer. Please ensure that you explicitly call close() on your cursor: SELECT _id, title, "content://media/external/audio/media", title_key FROM audio WHERE (is_ringtone=1
    02-11 13:59:40.672: WARN/SQLiteCompiledSql(200): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
    02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:62)
    02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:100)
    02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46)
    02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
    02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
    02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:330)
    02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at com.android.providers.media.MediaProvider.query(MediaProvider.java:1468)
    02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at android.content.ContentProvider$Transport.bulkQuery(ContentProvider.java:150)
    02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:111)
    02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at android.os.Binder.execTransact(Binder.java:288)
    02-11 13:59:40.672: WARN/SQLiteCompiledSql(200):     at dalvik.system.NativeStart.run(Native Method)
    02-11 13:59:40.692: WARN/SQLiteCompiledSql(200): Releasing statement in a finalizer. Please ensure that you explicitly call close() on your cursor: SELECT _id, title, "content://drm/audio", title AS title_key FROM audio ORDER BY title
    02-11 13:59:40.692: WARN/SQLiteCompiledSql(200): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
    02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:62)
    02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:100)
    02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46)
    02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
    02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
    02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:330)
    02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:280)
    02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at com.android.providers.drm.DrmProvider.query(DrmProvider.java:177)
    02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at android.content.ContentProvider$Transport.bulkQuery(ContentProvider.java:150)
    02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:111)
    02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at android.os.Binder.execTransact(Binder.java:288)
    02-11 13:59:40.692: WARN/SQLiteCompiledSql(200):     at dalvik.system.NativeStart.run(Native Method)
    Was mache ich falsch? Fehler tritt sowohl auf meinem Desire als auch im Emulator auf.

    Danke und Grüße
    Stefan
     
  2. DieGoldeneMitte, 11.02.2011 #2
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Welches ist den Zeile 90 (da kommt die NPE her)? Doch nicht etwa die mit dem sound.setText()? :blink:
     
  3. The_S, 11.02.2011 #3
    The_S

    The_S Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    105
    Erhaltene Danke:
    10
    Registriert seit:
    07.01.2010
    Doch, hab ich ja geschrieben ;) . uri ist null. Habe ich auch vorher verifiziert (hier aber nicht mehr ersichtlich).
     
  4. The_S, 11.02.2011 #4
    The_S

    The_S Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    105
    Erhaltene Danke:
    10
    Registriert seit:
    07.01.2010
    OK, wenn ich den Default-Wert im Emulator auswähle funktionierts. Wähle ich hingegen "Silent" im Emulator aus, bekomme ich die Fehlermeldung. Kann es sein, dass ich noch eine Berechtigung setzten muss? Falls ja, welche?

    Danke!
     
  5. The_S, 12.02.2011 #5
    The_S

    The_S Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    105
    Erhaltene Danke:
    10
    Registriert seit:
    07.01.2010
    Hab die Permission gesetzt, dass man auf die SD-Karte schreiben möchte. Jetzt funktionierts (warum auch immer, wird ja gelesen und nicht geschrieben)
     

Diese Seite empfehlen