java.lang.RuntimeException:将结果ResultInfo(who = null,request = 1888,result = 0,data = null)传递给activity

我的应用程序允许用户按下一个button,它打开相机,他们可以拍照,它会出现在imageview。 如果用户按下或取消,而相机打开时,我得到这个力量closures – 结果失败ResultInfo {谁= null,请求= 1888,结果= 0,数据=空}活动…所以我猜测结果= 0是什么,我需要插入,使这个停止部队closures?

以下是我的代码。 我知道我忘了一些东西,但不能弄明白! (不可否认,我大约在学习Android开发2周)。 谢谢你的帮助!

private static final int CAMERA_REQUEST = 1888; private ImageView imageView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.imageView = (ImageView)this.findViewById(R.id.photostrippic1); ImageView photoButton = (ImageView) this.findViewById(R.id.photostrippic1); photoButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, CAMERA_REQUEST); } }); protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == CAMERA_REQUEST) { Bitmap photo = (Bitmap) data.getExtras().get("data"); imageView.setImageBitmap(photo); } 

我想我会在那里需要一个“其他”,但我不知道这样做。

下面是logcat

  java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1888, result=0, data=null} to activity {photo.booth.app/photo.booth.app.PhotoboothActivity}: java.lang.NullPointerException at android.app.ActivityThread.deliverResults(ActivityThread.java:2934) at android.app.ActivityThread.handleSendResult(ActivityThread.java:2986) at android.app.ActivityThread.access$2000(ActivityThread.java:132) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1068) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:150) at android.app.ActivityThread.main(ActivityThread.java:4293) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at photo.booth.app.PhotoboothActivity.onActivityResult(PhotoboothActivity.java:76) at android.app.Activity.dispatchActivityResult(Activity.java:4108) at android.app.ActivityThread.deliverResults(ActivityThread.java:2930) ... 11 more 

添加这第一个条件应该工作:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(resultCode != RESULT_CANCELED){ if (requestCode == CAMERA_REQUEST) { Bitmap photo = (Bitmap) data.getExtras().get("data"); imageView.setImageBitmap(photo); } } } 

如果用户取消请求,数据将被返回为NULL 。 当你调用data.getExtras().get("data");这个线程会抛出nullPointerException data.getExtras().get("data"); 。 我想你只需要添加一个条件来检查返回的数据是否为空。

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == CAMERA_REQUEST) { if (data != null) { Bitmap photo = (Bitmap) data.getExtras().get("data"); imageView.setImageBitmap(photo); } } 

我build议使用这个:

  1. 检索父亲的Intent

     Intent intentParent = getIntent(); 
  2. 直接传达讯息。

     setResult(RESULT_OK, intentParent); 

这可以防止会导致空数据错误的活动丢失。

  protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == CAMERE_REQUEST && resultCode == RESULT_OK && data != null) { Bitmap photo = (Bitmap) data.getExtras().get("data"); imageView.setImageBitmap(photo); } } 

你可以检查resultCode是否等于RESULT_OK,这只会是如果一个图片被拍摄和select,一切正常的情况下。 这里的if子句应该检查每个条件。

我有这个错误信息显示给我,因为我在主线程上使用networking,Android的新版本有一个“严格”的政策,以防止这一点。 为了解决它只是抛出任何networking连接调用到AsyncTask。

例:

  AsyncTask<CognitoCachingCredentialsProvider, Integer, Void> task = new AsyncTask<CognitoCachingCredentialsProvider, Integer, Void>() { @Override protected Void doInBackground(CognitoCachingCredentialsProvider... params) { AWSSessionCredentials creds = credentialsProvider.getCredentials(); String id = credentialsProvider.getCachedIdentityId(); credentialsProvider.refresh(); Log.d("wooohoo", String.format("id=%s, token=%s", id, creds.getSessionToken())); return null; } }; task.execute(credentialsProvider); 

我也遇到过这个问题,我通过添加两个条件解决了一个问题:

 resultCode != null 

另一个是:

 resultCode != RESULT_CANCELED 

这是我的情况

startActivityForResult(intent, PICK_IMAGE_REQUEST);

我使用相同的值定义了两个请求代码PICK_IMAGE_REQUESTSCAN_BARCODE_REQUEST ,例如。

static final int BARCODE_SCAN_REQUEST = 1;

static final int PICK_IMAGE_REQUEST = 1;

这也可能导致问题

我的问题是在被调用的活动中,当它试图通过“完成”返回到先前的活动。 我错误地设定了意图。 下面的代码是Kotlin。

我正在这样做:

  intent.putExtra("foo", "bar") finish() 

当我应该这样做的时候:

  val result = Intent() result.putExtra("foo", "bar") setResult(Activity.RESULT_OK, result) finish()