startActivity调用first,在startActivityForResult调用之后调用

时间:2012-09-17 07:18:31

标签: android android-activity

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

我有一个按钮,通过它我需要从电话库中选择一个图像(可能来自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

4 个答案:

答案 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上