这是我从未想到的第一个奇怪的结果。这可能是该领域缺乏技能的。
我有一个按钮,通过它我需要从电话库中选择一个图像(可能来自SD卡)。我使用隐式意图来调用电话库并获得startActivityForResult()
的绝对图像路径。我立即呼叫另一个活动,将该路径放在startActivity()
。
根据我的情况,我在按钮的onClick()
中编写了以下代码。
@Override
public void onClick(View v) {
upLoadPhoto();
}
protected void upLoadPhoto() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType("image/*");
intent.putExtra("return-data", true);
System.out.println("select image");
startActivityForResult(intent, 1);
startActivity(next);
finish();
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1 && data != null && data.getData() != null){
Uri uri = data.getData();
if (uri != null) {
Cursor cursor = getContentResolver().query(uri, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null);
cursor.moveToFirst();
final String imageFilePath = cursor.getString(0);
System.out.println("Background : "+imageFilePath);
next.putExtra("backImagePath", imageFilePath);
cursor.close();
super.onActivityResult(requestCode, resultCode, data);
}
}
}
当我点击按钮时,先调用startActivity(next)
,然后调用startActivityForResult(intent,1)
。在尝试通过bundle对象获取第二个活动中的图像路径时,由于NullPointerException
被首先调用,因此获得startActivity(next)
。
感谢
Aswin
答案 0 :(得分:0)
如何将startActivity(next);
的呼叫转移到onActivityResult()
...这样您就可以在获取路径后导航到其他活动
protected void upLoadPhoto() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType("image/*");
intent.putExtra("return-data", true);
System.out.println("select image");
startActivityForResult(intent, 1);
finish();
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1 && data != null && data.getData() != null){
Uri uri = data.getData();
if (uri != null) {
Cursor cursor = getContentResolver().query(uri, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null);
cursor.moveToFirst();
final String imageFilePath = cursor.getString(0);
System.out.println("Background : "+imageFilePath);
next.putExtra("backImagePath", imageFilePath);
cursor.close();
startActivity(next);
super.onActivityResult(requestCode, resultCode, data);
}
}
}
答案 1 :(得分:0)
从该函数中删除startActivity(next)
并在检索数据后将其放在onActivityResult
答案 2 :(得分:0)
从图库成功中选择图片后,您在startActivity()
内有onActivityResult()
。因为当startActivityForResult()
进入图库以获取图片时,startActivity()
会被触发,然后您转到下一个活动。
答案 3 :(得分:0)
从该函数中删除该startActivity(next),并在get 1添加您的下一个意图后将其放在onActivityResult上