2013-05-08 31 views
6

Trong đoạn của tôi, tôi đã bắt đầu mục đích startActivityforresult cho capture ảnh. Tôi đã ghi đè lên phương thức gọi lạiActivityResult trong lớp phân đoạn. Tôi đã thực hiện gọi lại onActivityResult trong hoạt động chính cho một số mục đích khác. Vấn đề của tôi là fragment onActivityResult sau khi thực hiện các cuộc gọi hoạt động phương thức onActivityResult và trả về ngoại lệ con trỏ null. Fragment onactivityresult phương phápPhương thức phân mảnh onActivityResult khi thực hiện các hoạt động cuộc gọi trênActivityResult

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

Hoạt động 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); 
} 

cách gọi chỉ mảnh onactivityresult phương pháp?

Logcat MY

Không cung cấp kết quả ResultInfo {người = null, yêu cầu = 1, kết quả = -1, data = {Ý định hành động = inline-dữ liệu dat = Nội dung: // media/bên ngoài/images/phương tiện truyền thông/222 (có tính năng bổ sung)}} để hoạt động {com.mobiotics.tvbuddydemo/com.mobiotics.tvbuddydemo.TVBuddyMainActivity}: java.lang.NullPointerException

+2

Di siêu cuộc gọi trong đoạn –

Trả lời

1

Hãy thử loại bỏ các dòng super.onActivityResult(requestCode, resultCode, data); trong đoạn của bạn onActivityResult().

+0

stillnot làm việc – user1526671

+1

Nếu thoát/đóng hoạt động, phương thức hoạt động 'onActivityResult() 'phải được gọi. Tôi sẽ đề nghị bạn loại bỏ phương thức phân đoạn và chỉ sử dụng 'onActivityResult()' theo hoạt động. – Neoh

1

public void onActivityResult được gọi khi Activity bạn bắt đầu với startActivityForResult đang kêu gọi finish()

+2

có thể làm cho nó rõ ràng – user1526671

0

Các onActivityResult trong Hoạt động sẽ được gọi đầu tiên kết thúc, bạn không nên loại bỏ chế biến các kết quả trong hoạt động nhưng làm những gì bạn muốn thông qua kiểm tra requestCode.

9

Nếu bạn có onActivityResult được xác định trong Hoạt động của mình, bạn không thể bỏ qua và chuyển trực tiếp đến Phân đoạn. Tuy nhiên, bạn có thể chuyển hướng nó đến Fragment nếu Activity không biết cách xử lý nó. Sử dụng các mã yêu cầu duy nhất để phân biệt giữa người xử lý kết quả.

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

Lưu ý: Hãy chắc chắn rằng để gọi getActivity() startActivityForResult() từ mảnh của bạn và không chỉ đơn giản là sử dụng this.startActivityForResult()

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

Hope this helps..

+0

nhưng nó trả về một số giá trị rác cho mã yêu cầu – user1526671

+0

Điều đó có nghĩa là bạn đang gọi startActivityForResult() từ Fragment của bạn không chính xác. Bạn cần gọi hàm getActivity(). StartActivityForResult().Tôi sẽ cập nhật câu trả lời để bao gồm điều này. –

+0

tôi đã thực hiện ở trên nhưng nhận được thất bại trong việc cung cấp kết quả infoerror null con trỏ ngoại lệ – user1526671

0

Tôi cũng gặp vấn đề này.

gọi của một hoạt động từ đoạn

((Hoạt động) ngữ cảnh) .startActivityForResult (photoPickerIntent, 100);

tại đây "ngữ cảnh" từ FragmentActivity. Bây giờ kết quả được đưa ra trong phương thức FargmentActivity onActivityResult. để chuyển đổi kết quả này, bạn phải khai báo một biến tĩnh của lớp phân đoạn trong lớp hoạt động mảnh mai.

static ActivityUploadPhotos activityUploadPhotos; 

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

if(activityUploadPhotos!=null) 
{ 
      activityUploadPhotos.onActivityResult(requestCode, resultCode, data); 
} 
Các vấn đề liên quan