[英]Fragment onActivityResult method on executing calls activity onActivityResult
In my fragment I have started startActivityforresult intent for photo capture.I have overridden onActivityResult callback method in fragment class. 在我的片段中,我已经启动了startActivityforresult意图进行照片捕获。我已经在片段类中重写了onActivityResult回调方法。 I have implemented onActivityResult callback in main activity for some other intent.
我已经在主要活动中实现了onActivityResult回调以实现其他一些意图。 My problem is fragment onActivityResult after execution calls activities onActivityResult method and returns null pointer exception.
在执行调用活动onActivityResult方法并返回空指针异常后,我的问题是片段onActivityResult。 Fragment onactivityresult method
片段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);
}
}
}
Activity onActivityResult 活动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);
}
how to call only fragment onactivityresult method? 如何只调用片段onactivityresult方法?
MY Logcat 我的Logcat
Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { act=inline-data dat=content://media/external/images/media/222 (has extras) }} to activity {com.mobiotics.tvbuddydemo/com.mobiotics.tvbuddydemo.TVBuddyMainActivity}: java.lang.NullPointerException 将结果ResultInfo {who = null,request = 1,result = -1,data = Intent {act = inline-data dat = content:// media / external / images / media / 222(has extras)}}传递给活动失败{com.mobiotics.tvbuddydemo / com.mobiotics.tvbuddydemo.TVBuddyMainActivity}:java.lang.NullPointerException
If you have onActivityResult defined in your Activity, you can't skip it and go directly to the Fragment. 如果您在Activity中定义了onActivityResult,则不能跳过它并直接转到Fragment。 You can however redirect it to the Fragment if the Activity does not know how to handle it.
但是,如果Activity不知道如何处理它,您可以将其重定向到Fragment。 Use unique requestCodes to differentiate between who handles the result.
使用唯一的requestCodes来区分处理结果的人员。
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);
}
}
Note: Make sure to call getActivity().startActivityForResult() from your fragment and not simply using this.startActivityForResult() 注意:确保从片段中调用getActivity()。startActivityForResult()而不是简单地使用this.startActivityForResult()
public void something(Intent intent) {
getActivity().startActivityForResult(intent);
// or if you are using SherlockActionBar/Support package
getSupportActivity().startActivityForResult(intent);
}
Hope this helps. 希望这可以帮助。
Try remove the line super.onActivityResult(requestCode, resultCode, data);
尝试删除行
super.onActivityResult(requestCode, resultCode, data);
in your fragment onActivityResult()
. 在您的片段
onActivityResult()
。
当您使用startActivityForResult
启动的Activity
调用finish()
时,将调用public void onActivityResult
将首先调用Activity中的onActivityResult,您不应该删除处理Activity中的结果,而是通过检查requestCode来执行您想要的操作。
I aslo face this problem. 我也面临这个问题。
Calling of an activity from fragment 从片段调用活动
((Activity)context).startActivityForResult(photoPickerIntent, 100); ((Activity)context).startActivityForResult(photoPickerIntent,100);
here "context" from FragmentActivity. 这里来自FragmentActivity的“上下文”。 Now the result comes in FargmentActivity onActivityResult method.
现在结果出现在FargmentActivity onActivityResult方法中。 to switch this result you have to declare a static variable of fragment class in fragmetn activity class.
要切换此结果,您必须在fragmetn活动类中声明片段类的静态变量。
static ActivityUploadPhotos activityUploadPhotos;
...
ActivityUploadPhotos f = new ActivityUploadPhotos();
ActivityHome.activityUploadPhotos=f;
......
if(activityUploadPhotos!=null)
{
activityUploadPhotos.onActivityResult(requestCode, resultCode, data);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.