2013-01-09 12 views
7

Was macht meine App? Die App wählt ein Foto aus der Fotogalerie aus.Warum schließt die App plötzlich, ohne dass ein Fehler angezeigt wird?

Was ist mein Problem? Sobald ich das Foto aus der Galerie auswählen, schließt es ohne Fehler.

Was habe ich getan? Ich habe den Speicher des Geräts erhöht und es hat nicht funktioniert. Ich habe es aus dem Projekt genommen und die Aktivität hat gut funktioniert, es kam wieder zu der Aktivität.

Was ist das Hauptproblem? Es funktioniert nicht auf dem Projekt und ich kann nicht sagen warum.

Wollen Sie sehen, was passiert? Hier ist ein Video. Zuerst wenn es schließt, und zweitens wenn ich es von einem anderen Projekt mache und gut funktioniert.

http://www.youtube.com/watch?v=SntnyKiJQ1Q&feature=youtu.be


EDIT

Mein Problem war, dass, wenn ich das Bild aus der Galerie wählen auf dem Stapel keine Aktivität gab.

Warum?

Das Problem war, auf android Manifest: Nohistory = „true“ Tag, da es keine Geschichte war die Galerie keine Tätigkeit finden konnte, und es die App geschlossen.


Der Code:

Die Absicht Ich benutze die Galerie zu öffnen und wählen Sie ein Foto:

public void openGallery(int req_code){ 

    Intent intent = new Intent(); 
    intent.setType("image/*"); 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    startActivityForResult(Intent.createChooser(intent,"Select file to upload "), req_code); 
} 

Die onActivityResult, wo ich die Daten bekommen, die nie, weil es schließt aufgerufen wird:

public void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (resultCode == RESULT_OK) { 
     Uri selectedImageUri = data.getData(); 
     if (requestCode == SELECT_FILE1) 
     { 
      selectedPath1 = getPath(selectedImageUri); 
      System.out.println("selectedPath1 : " + selectedPath1); 
     } 
     if (requestCode == SELECT_FILE2) 
     { 
      selectedPath2 = getPath(selectedImageUri); 
      System.out.println("selectedPath2 : " + selectedPath2); 
     } 
     tv.setText("Selected File paths : " + selectedPath1 + "," + selectedPath2); 
    } 
} 

Die logcat:

012.351.
01-05 15:18:14.569: I/ActivityManager(59): Starting activity: Intent { act=android.intent.action.UPLOADIMAGEDEMO cmp=com.example/.UploadImageDemo } 
01-05 15:18:15.779: D/dalvikvm(2496): GC_EXTERNAL_ALLOC freed 2697 objects/189152 bytes in 92ms 
01-05 15:18:16.599: I/ActivityManager(59): Displayed activity com.example/.UploadImageDemo: 1953 ms (total 1953 ms) 
01-05 15:18:21.899: D/dalvikvm(279): GC_EXPLICIT freed 871 objects/134112 bytes in 217ms 
01-05 15:18:26.620: I/ActivityManager(59): Starting activity: Intent { act=android.intent.action.CHOOSER cmp=android/com.android.internal.app.ChooserActivity (has extras) } 
01-05 15:18:28.250: I/ActivityManager(59): Starting activity: Intent { act=android.intent.action.GET_CONTENT typ=image/* flg=0x3000000 cmp=com.android.gallery/com.android.camera.ImageGallery } 
01-05 15:18:28.670: D/dalvikvm(279): GC_EXTERNAL_ALLOC freed 388 objects/53352 bytes in 60ms 
01-05 15:18:28.850: D/dalvikvm(279): GC_EXTERNAL_ALLOC freed 326 objects/90664 bytes in 53ms 
01-05 15:18:29.200: I/ActivityManager(59): Displayed activity com.android.gallery/com.android.camera.ImageGallery: 873 ms (total 2345 ms) 
01-05 15:18:29.420: D/dalvikvm(279): GC_EXTERNAL_ALLOC freed 725 objects/106960 bytes in 140ms 
01-05 15:18:30.430: W/InputManagerService(59): Starting input on non-focused client   [email protected] (uid=10002 pid=279) 
01-05 15:18:32.010: D/dalvikvm(112): GC_FOR_MALLOC freed 9994 objects/476368 bytes in 149ms 

Ich hoffe, die Gemeinde kann mir helfen !!

+0

+1 für das Video! Hast du es auch auf einem echten Gerät ausprobiert? –

+1

Dies ist nicht der richtige Teil der Logcat-Ausgabe. Führen Sie Ihre App von der IDE aus, bis sie abstürzt, und suchen Sie logcat nach "Budget überschreitet". Wenn Sie es finden, schreiben Sie bitte den relevanten Teil. Oh, und +1 für das Video auch ... – Simon

+0

Chris habe ich von einem echten Gerät ausprobiert und es ist passiert. Simon, ich habe den Grund gefunden und poste es unten. Danke euch beiden für eure Hilfe. – eyyo

Antwort

4

Ok Jungs, vor allem vielen Dank für Ihre Antworten, sie halfen mir heute Gang zu halten ..

Das Problem war, auf der manifesten android: Nohistory = „true“ Tag, wie es war keine Geschichte die Galerie konnte keine Aktivität finden und es schloss die App.

Nochmals vielen Dank.

0

Normalerweise werden Android-Anwendungen abgestürzt, wenn wir versuchen, Bilder als Bitmap/Drawable großer Größe zu laden (abhängig von dem von os zugewiesenen Heapspeicher); für zB: 1mb große Bilder oder mehr.

Versuchen Sie, kleine Bilder zu laden und prüfen Sie, ob das Problem weiterhin besteht. Normalerweise tritt ein Absturz bei Code auf, der BitmapFactory zugeordnet ist. *.

Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(), 
     R.drawable.android); 
+0

Vielen Dank für Ihre Hilfe Körper Ich fand die tatsächliche Antwort auf meine Frage. – eyyo

0

Es ist schwer zu sagen, was genau falsch ist, weil die Ablaufverfolgung keine Ausnahmebedingung enthält.Aber ich kann Stück Code teilen:

Start Intent

private final int GALLERY_REQUEST = 0; 

private void runGallery() { 
    Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
    startActivityForResult(intent, GALLERY_REQUEST); 
} 

Griff Ergebnis

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     Uri selectedPictureUri = data.getData(); 
     loadGalleryAttachment(selectedPictureUri); 
    } 
} 

private void loadGalleryAttachment(Uri uri){ 
    if (uri != null) { 
     String path = getPath(uri); 
     File f = new File(path); 
     // do something with picture file 
    } 
} 

public String getPath(Uri uri) { 
    String[] projection = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = managedQuery(uri, projection, null, null, null); 
    if (cursor != null) { 
     int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     return cursor.getString(column_index); 
    } 
} 

Hoffe, es wird Ihnen helfen!

+0

Vyacheslav danke für deine Hilfe Ich habe die Antwort auf meine Frage gefunden. – eyyo

1

// Leider nicht genug Ruf akzeptierte Antwort zu kommentieren, aber ich denke, mein Fall wird hilfreich sein für andere mit dem gleichen Problem

ich genau hatte das Problem spare im Code von einem anderen Entwickler geschrieben und kämpfte für ein paar Tage damit. Aber es gab kein android: noHistory-Attribut im Manifest, aber die Aktivität wurde mit dem Flag FLAG_ACTIVITY_NO_HISTORY gestartet.

So:

intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 

ich es stundenlang gegoogelt, erreicht diese Frage SO zweimal, fand aber nur eine Antwort aus, wenn entschieden mein ganzes Projekt für Wort „Geschichte“ zu suchen.

Verwandte Themen