Uri.parse fehler nur auf einem Device

  • Antworten:8
Gelöschter Account
  • Forum-Beiträge: 2.492

07.04.2014, 18:23:18 via Website

Hallo,

habe gestern mal meine App auf dem Handy meiner Freundin getestet (S4 mini) und da klappt auf einmal eine Funktion die auf meinen Handys (One V, Galaxy young) geklappt hat nicht mehr bzw. die App stürzt ab.
Ich hab ihr Handy leider jetzt nicht hier deswegen habe ich das mal auf einem Emulator getestet und da stürzt die App auch ab.
Der Emulator spuckt mir folgende Zeile/Bereich aus:

1Bitmap cs = null;
2 v1.setDrawingCacheEnabled(true);
3 v1.buildDrawingCache(true);
4 cs = Bitmap.createBitmap(v1.getDrawingCache(true));
5 Canvas canvas = new Canvas(cs);
6 v1.draw(canvas);
7 canvas.save();
8 v1.setDrawingCacheEnabled(false);
9
10 String path = Images.Media.insertImage(getContext().getContentResolver(), cs, "MyImage", null);
11 Uri file = Uri.parse(path);//Hier kommt die NullPointerException Zeile 140
12
13 OutputStream outStream = null;
14 try {
15 outStream = getContext().getContentResolver().openOutputStream(file);
16 } catch (FileNotFoundException e) {
17 // TODO Auto-generated catch block
18 e.printStackTrace();
19 }
20 cs = Bitmap.createScaledBitmap(cs, cs.getWidth()*2, cs.getHeight()*2, true);
21 cs.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
22
23 //file senden
24 Intent sharingIntent = new Intent(Intent.ACTION_SEND);
25 sharingIntent.putExtra(Intent.EXTRA_STREAM, file);
26 sharingIntent.setType("image/jpeg");
27 getContext().startActivity(Intent.createChooser(sharingIntent,"Erfolg teilen!"));

Das sagt die LogCat:
1E/AndroidRuntime(373): FATAL EXCEPTION: main
2 E/AndroidRuntime(373): java.lang.NullPointerException: uriString
3 E/AndroidRuntime(373): at android.net.Uri$StringUri.<init>(Uri.java:422)
4 E/AndroidRuntime(373): at android.net.Uri$StringUri.<init>(Uri.java:412)
5 E/AndroidRuntime(373): at android.net.Uri.parse(Uri.java:384)
6 E/AndroidRuntime(373): at com.example.lars.StatistikDialog.onClick(StatistikDialog.java:140)
7 E/AndroidRuntime(373): at android.view.View.performClick(View.java:3100)
8 E/AndroidRuntime(373): at android.view.View$PerformClick.run(View.java:11644)
9 E/AndroidRuntime(373): at android.os.Handler.handleCallback(Handler.java:587)
10 E/AndroidRuntime(373): at android.os.Handler.dispatchMessage(Handler.java:92)
11 E/AndroidRuntime(373): at android.os.Looper.loop(Looper.java:126)
12 E/AndroidRuntime(373): at android.app.ActivityThread.main(ActivityThread.java:3997)
13 E/AndroidRuntime(373): at java.lang.reflect.Method.invokeNative(Native Method)
14 E/AndroidRuntime(373): at java.lang.reflect.Method.invoke(Method.java:491)
15 E/AndroidRuntime(373): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
16 E/AndroidRuntime(373): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
17 E/AndroidRuntime(373): at dalvik.system.NativeStart.main(Native Method)

Wisst ihr woran das liegen kann? Hab schon Internet und Access Network Permission hinzugefügt (muss das?) aber kommt noch das gleiche.
Woran kann das liegen das es auf meinen Handys geht aber auf ihrem nicht?

— geändert am 07.04.2014, 19:46:23

Antworten
Georg C.
  • Forum-Beiträge: 235

07.04.2014, 19:52:56 via Website

Hallo,
ich fühle mich im Android noch sehr unsicher, aber so allgemein;

Dein String path, ist eigentlich kein String!

Ein String path könne so:
String path = "http://www.google.com";
aussehen.
Der Parser der Uri Klasse, kann es nicht richtig konvertieren, und wirf die NullPointerException raus.
Du möchtest bestimmt den File- Path!

LG
Georg

Sorry für Gramatik & Stilistik Fehler.

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

07.04.2014, 19:58:19 via Website

Aber es ist doch als Datentyp String deklariert und wenn es dann keiner wäre würde er doch auch eine Warnung oder so anzeigen oder?
Ja wie komme ich denn an den File-Path?
Aber mich wundert es, dass es auf den anderen 2 Handys funktioniert.

Edit: Kann es daran liegen, dass das Handy meiner Freundin keine externe SD - Karte hat? Wenn ich aus meinen Handys die SD - Karte raus nehme stürzt die App nämlich auch ab. Wie kann ich das beheben?

— geändert am 07.04.2014, 20:21:13

Antworten
Georg C.
  • Forum-Beiträge: 235

07.04.2014, 20:49:58 via Website

Ich vermute, die Antwort steckt im:
... getContext().getContentResolver() ...
und ist nichts anderes als "Zeiger Pfad" auf "Abschnitt" im richtigem Pfad.
Ich sollte mich hier aber noch nicht "so breit" machen!
Kann vieles noch selber nicht - und verstehe es auch noch nicht.
Deshalb - Sorry!
Sogar das API richtig zu interpretieren klappt bei mir (wie ich sehe - merke) nicht!
Also - ich gehe wieder etwas "Input sammeln"

Sicher ist, Du muss den Pfad zu deiner Datei richtig setzten.

LG
Georg

Ps.
ENTSCHULDIGUNG!

Sorry für Gramatik & Stilistik Fehler.

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

07.04.2014, 21:02:26 via Website

Ja und ich schätze ich kann den Pfad zu der Datei nicht setzen weil der auf der sd - Karte sein soll die aber nicht vorhanden ist :(

Antworten
Michele
  • Forum-Beiträge: 1.525

07.04.2014, 21:14:31 via Website

Lars F.
Edit: Kann es daran liegen, dass das Handy meiner Freundin keine externe SD - Karte hat? Wenn ich aus meinen Handys die SD - Karte raus nehme stürzt die App nämlich auch ab. Wie kann ich das beheben?

Guck doch einfach nach???:D

Hier als Tipp:
1public static final String PATH_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();



LG

— geändert am 07.04.2014, 21:17:50

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

07.04.2014, 21:23:15 via Website

Da kommt dann raus: /mnt/sdcard
Wofür ist das jetzt der Pfad? Eine "sdcard" ist ja nicht vorhanden.

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

07.04.2014, 21:49:08 via Website

Was bringt mir denn jetzt der Pfad /mnt/sdcard? Was sagt das aus?

Ich habe jetzt mal mit:
1saveImageToInternalStorage(cs);
2 File filepath = getContext().getFileStreamPath("myimage.png");
3 Toast.makeText(getContext(), ""+filepath, Toast.LENGTH_LONG).show();
4 Uri file = Uri.parse(filepath.getPath());
5
6
7public boolean saveImageToInternalStorage(Bitmap image) {
8
9 try {
10 // Use the compress method on the Bitmap object to write image to
11 // the OutputStream
12 FileOutputStream fos = getContext().openFileOutput("myimage.png", Context.MODE_PRIVATE);
13
14 // Writing the bitmap to the output stream
15 image.compress(Bitmap.CompressFormat.JPEG, 100, fos);
16 fos.close();
17
18 return true;
19 } catch (Exception e) {
20 Log.e("saveToInternalStorage()", e.getMessage());
21 return false;
22 }
23 }
versucht das Bild im internen Speicher zu speichern, weil es den ja bei jedem Handy gibt. Dann zeigt er mir bei dem Toast auch an, das der filepath irgendwo bei /data/data/packkagename/myimage.png liegt. Versuche ich das Bild jetzt aber über Bluetooth oder so zu senden mit:
1Intent sharingIntent = new Intent(Intent.ACTION_SEND);
2 sharingIntent.putExtra(Intent.EXTRA_STREAM, file);
3 sharingIntent.setType("image/jpeg");
4 getContext().startActivity(Intent.createChooser(sharingIntent,"Erfolg teilen!"));

sagt er mir einfach nur fehlgeschlagen sonst nichts.
Aber das Bild ist doch da.

— geändert am 07.04.2014, 21:49:21

Antworten