Sound auswählen

T

The_S

Fortgeschrittenes Mitglied
10
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
 
Welches ist den Zeile 90 (da kommt die NPE her)? Doch nicht etwa die mit dem sound.setText()? :blink:
 
Doch, hab ich ja geschrieben ;) . uri ist null. Habe ich auch vorher verifiziert (hier aber nicht mehr ersichtlich).
 
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!
 
Hab die Permission gesetzt, dass man auf die SD-Karte schreiben möchte. Jetzt funktionierts (warum auch immer, wird ja gelesen und nicht geschrieben)
 

Ähnliche Themen

T
Antworten
2
Aufrufe
1.079
jogimuc
J
DagobertDokate
Antworten
0
Aufrufe
873
DagobertDokate
DagobertDokate
Zurück
Oben Unten