0

这是我第一个没想到的奇怪结果。这可能是该领域缺乏技能。

好吧,我有一个按钮,我需要通过它从手机图库中选择一张图片(可能来自 sdcard)。我使用隐式意图调用电话图库并获得了绝对图像路径startActivityForResult()。立即调用另一个活动,将该路径与startActivity().

根据我的情况,我在onClick()of 按钮中编写了以下代码。

@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)调用。当我试图通过捆绑对象获取第二个活动中的图像路径时,我得到NullPointerException的是因为startActivity(next)首先被调用。

当我看到我的调试点不符合预期时,我惊掉了下巴。希望我得到这个问题的确切原因。

谢谢阿斯

4

4 回答 4

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

}

于 2012-09-17T07:20:38.630 回答
0

startActivity(next)从该功能中删除它并onActivityResult在您检索数据后将其放入

于 2012-09-17T07:21:32.270 回答
0

当您的图像从图库中成功选择时,您已调用startActivity()内部。onActivityResult()因为当startActivityForResult()它去画廊拾取图像时,直到那时startActivity()被解雇,你移动到下一个活动。

于 2012-09-17T07:21:32.247 回答
0

从该函数中删除 startActivity(next) 并将其放在 onActivityResult 上 get 1 add Your Next Intent

于 2012-09-17T07:35:16.427 回答