2013-05-08 30 views
6

W moim fragmencie zacząłem używać funkcji startActivityforresult do przechwytywania zdjęć. Nadpisałem metodę wywołania zwrotnegoActivityResult w klasie fragmentów. Zaimplementowałem wywołanie zwrotne onActivityResult w głównej aktywności dla jakiegoś innego celu. Moim problemem jest fragment onActivityResult po wywołaniu wywołania działań w metodzieActivityResult i zwraca wyjątek wskaźnika null. Fragment onactivityresult metodaFragment metody onActivityResult podczas wykonywania aktywności wywołań onActivityResult

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == Activity.RESULT_OK) 
    { 
     prof_bitmap = null; 
     if (requestCode == 0) 
     { 
      Log.e("" ,"entered activity Result Code 0"); 
      Uri photoUri = data.getData(); 
      if (photoUri != null) 
      { 
       String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
       Cursor cursor = getActivity().getContentResolver().query(
         photoUri, filePathColumn, null, null, null); 
       cursor.moveToFirst(); 
       int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
       String filePath = cursor.getString(columnIndex); 
       cursor.close(); 
       Log.e("" ,"File Path" +filePath); 
       prof_bitmap = setImage(filePath); 
      } 
     } 
     if (requestCode == 1) 
     { 
      Log.e("" ,"entered activity Result Code 1"); 
      Bitmap bitmap = (Bitmap) data.getExtras().get("data"); 
      prof_bitmap = bitmap; 
      Log.e("" ,"entered activity Result Code 1"+bitmap); 
      profile_pic.setImageBitmap(bitmap); 
     } 
    } 
} 

aktywny onActivityResult

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    super.onActivityResult(requestCode, resultCode, data); 
    Log.e("" ,"called onActivityResult in main"); 
    Session.getActiveSession().onActivityResult(this, requestCode, 
      resultCode, data); 
} 

jak zadzwonić tylko fragment onactivityresult metody?

MY Logcat

Awaria dostarczając wynik ResultInfo {kto = null zwrócić = 1, wynik = -1, data = {Intent act = DAT inline-data = content: // media/zewnętrzne/images/nośnik/222 (posiada dodatki)}} {com.mobiotics.tvbuddydemo aktywności/com.mobiotics.tvbuddydemo.TVBuddyMainActivity}: java.lang.NullPointerException

+2

Usuń połączenie w super-fragmentu –

Odpowiedz

1

Spróbuj usunąć wiersz super.onActivityResult(requestCode, resultCode, data); w swoim fragmencie onActivityResult().

+0

stillnot pracy – user1526671

+1

Jeśli wyjście/zamknąć działalność, metody aktywności 'onActivityResult()' musi być wywołana. Proponuję usunąć metodę fragmentów i użyć tylko 'onActivityResult()' według działania. – Neoh

1

public void onActivityResult jest wywoływana, gdy Activity zacząłeś z startActivityForResult zakończeniu nazywając finish()

+2

można wyczyścić – user1526671

0

onActivityResult aktywności zostanie wywołana po pierwsze, nie należy usuwać przetwarzanie wynik aktywności, ale to, co chcesz poprzez sprawdzenie requestCode.

9

Jeśli masz zdefiniowany w Aktywności atrybut onActivityResult, nie możesz go pominąć i przejść bezpośrednio do Fragmentu. Możesz jednak przekierować go do Fragmentu, jeśli Działanie nie wie, jak sobie z nim poradzić. Użyj unikalnych kodów żądań, aby rozróżnić, kto obsługuje wynik.

public void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    boolean processed = true; 

    if (resultCode == Activity.RESULT_OK) 
    { 
     if (requestCode == 0) { 
      // Something 
     } else if (requestCode == 1) { 
      // Something 
     } else { 
      processed = false; 
     } 
    } else { // Error 
     if (requestCode == 0) { 
      // Handle error 
     } else { 
      processed = false; 
     } 
    } 

    if (!processed) { 
     fragment1.onActivityResult(requestCode, resultCode, data); 
     fragment2.onActivityResult(requestCode, resultCode, data); 
     ... 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
} 

Uwaga: Upewnij się, aby zadzwonić getActivity() startActivityForResult() z fragmentu, a nie po prostu za pomocą this.startActivityForResult()

public void something(Intent intent) { 
    getActivity().startActivityForResult(intent); 
    // or if you are using SherlockActionBar/Support package 
    getSupportActivity().startActivityForResult(intent); 
} 

Nadzieja to pomaga..

+0

, ale zwraca pewną wartość śmieci dla kodu żądania – user1526671

+0

Oznacza to, że wywołujesz funkcję startActivityForResult() ze swojego fragmentu niepoprawnie. Musisz wywołać metodę getActivity(). StartActivityForResult().Zaktualizuję odpowiedź, aby to uwzględnić. –

+0

Mam zaimplementowane powyższe ale niepowodzenie w dostarczaniu wyników infoerror null wskaźnik wyjątek – user1526671

0

Zdaję sobie również sprawę z tego problemu.

Wywołanie działania z fragmentem

((aktywności) kontekstu) .startActivityForResult (photoPickerIntent, 100);

tutaj "kontekst" z FragmentActivity. Teraz wynik jest dostępny w metodzie FarributionActivity onActivityResult. aby przełączyć ten wynik, musisz zadeklarować statyczną zmienną klasy fragmentów w klasie aktywności fragmetn.

static ActivityUploadPhotos activityUploadPhotos; 

... 
ActivityUploadPhotos f = new ActivityUploadPhotos(); 
ActivityHome.activityUploadPhotos=f; 
...... 

if(activityUploadPhotos!=null) 
{ 
      activityUploadPhotos.onActivityResult(requestCode, resultCode, data); 
} 
Powiązane problemy