2013-01-09 13 views
7

Co robi moja aplikacja? Aplikacja wybiera zdjęcie z galerii zdjęć.Dlaczego aplikacja zamyka się nagle, nie wyświetlając żadnego błędu?

Jaki jest mój problem? Po wybraniu zdjęcia z galerii zamyka się ono bezbłędnie.

Co zrobiłem? Zwiększyłem pamięć urządzenia i nie działało. Wyciągnąłem go z proyect, a działanie sprawdziło się, wróciło do działania.

Jaki jest główny problem? To nie działa na proyect i nie mogę powiedzieć dlaczego.

Wold chcesz zobaczyć, co się dzieje? Oto wideo. Najpierw, gdy się zamyka, a po drugie, gdy robię to z innego projektu i działa dobrze.

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


EDIT

Moim problemem było to, że raz mogę wybrać zdjęcie z galerii nie było żadnej aktywności na stosie.

Dlaczego?

Problem polegał na manifestu android: Nohistory = „true” tag, ponieważ nie było historia galeria nie mógł znaleźć żadnej aktywności i zamknął aplikację.


Kod:

zamiarem mogę używać, aby otworzyć galerię i wybierz zdjęcie:

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); 
} 

onActivityResult gdzie mogę uzyskać dane, które nigdy nie jest wywoływana, ponieważ zamyka się:

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); 
    } 
} 

logcat:

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 

Mam nadzieję, że społeczność może mi pomóc!

+0

+1 za film! Czy wypróbowałeś go również na prawdziwym urządzeniu? –

+1

To nie jest właściwa część danych wyjściowych logcat. Uruchom aplikację z IDE, dopóki się nie zawiedzie, a następnie przeszukaj logcat pod kątem "przekroczenia budżetu". Jeśli ją znajdziesz, opublikuj odpowiednią część. Och, i +1 za wideo też ... – Simon

+0

Chris Próbowałem od prawdziwego urządzenia i to się działo. Simon, znalazłem przyczynę i opublikowałem ją poniżej. Dziękuje wam obojgu za waszą pomoc. – eyyo

Odpowiedz

4

Ok Chłopaki, przede wszystkim bardzo dziękuję za odpowiedzi, pomogli mi zachować dzisiaj dzieje ..

Problem polegał na manifestu android: Nohistory = „true” tag, jak było brak historii galeria nie może znaleźć żadnej aktywności i zamknęła aplikację.

Jeszcze raz, dziękuję wszystkim.

0

Zazwyczaj aplikacje systemu Android ulegają awarii, jeśli próbujemy załadować zdjęcia jako bitmapy/ciągliwe o ogromnym rozmiarze (w zależności od pamięci sterty przydzielonej przez system operacyjny); na przykład: obrazy o wielkości 1mb lub więcej.

Spróbuj załadować małe obrazy i sprawdź, czy problem nadal występuje. Zwykle zdarza się kod awarii związany z BitmapFactory. *.

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

Dziękuję za pomoc. Znalazłem faktyczną odpowiedź na moje pytanie. – eyyo

0

Trudno powiedzieć, co dokładnie jest nie tak, ponieważ ślad nie zawiera żadnych wyjątków.Ale mogę udostępnić kawałek kodu:

launch 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); 
} 

wynik uchwyt

@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); 
    } 
} 

nadzieję, że to pomoże!

+0

Wiaczesław Dziękuję za pomoc znalazłem odpowiedź na moje pytanie. – eyyo

1

// Niestety, nie ma wystarczającej reputacji komentować zaakceptowane odpowiedź, ale myślę, że mój przypadek będzie pomocne dla innych z tej samej kwestii

miałem dokładnie zapisać problem w kod napisany przez innego autora i walczyłem z tym przez kilka dni. Ale w manifeście nie było atrybutu android: noHistory, ale aktywność została uruchomiona z flagą FLAG_ACTIVITY_NO_HISTORY.

Jak to:

intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 

google dla niego godzinami, osiągnął to, więc pytanie dwa razy, ale okazało się odpowiedzieć tylko wtedy, gdy zdecydował się szukać cały mój projekt na słowo „historia”.

Powiązane problemy