Intent extras返回null

时间:2014-09-22 11:30:03

标签: android android-intent android-fragments

我从girdview适配器类调用startActivityForResult事件。 Gridview适配器类是由myFragment类创建的。 intent extras总是返回null onActivityResult事件。 你认为错误在哪里?感谢。

我的gridview适配器类;

 public class MyAdapter extends ArrayAdapter<MyInfo> {

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View view = convertView;

    if (view == null) {

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(layoutResourceID, null);

    }

    ImageButton btnImage = (ImageButton) view.findViewById(R.id.btnImage);

        @Override
        public boolean onLongClick(View v) {

            Intent intentCamera = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

            intentCamera.putExtra("Asd", "Asd");

            MyFragment.startActivityForResult(intentCamera, 1);

            return true;
        }
    });
  }

onActivityResult事件的MyFragment类

public class MyFragment extends Fragment {

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    ImageButton btn = (ImageButton) getActivity().findViewById(R.id.btnImage);

    switch (requestCode) {
    case 1:

        Bitmap photo = (Bitmap) data.getExtras().get("data");

         //photo is OK

        Bundle bundle = data.getExtras();

        if (bundle.getString("Asd") != null) {

            //bundle.getString("Asd")  NULL                         }

        if (data.hasExtra("Asd")) {

            //data.hasExtra("Asd") false
        }


        break;

    default:
        break;
    }

}
}

4 个答案:

答案 0 :(得分:2)

相机应用程序不会返回您的自定义字符串“Asd” - 这不是它的工作方式。

您可以期望将照片图像还原给您,或者图像文件。

如果您只是询问“Asd”,那么这就是您的答案 - 您将无法取回它。如果你问为什么没有图片回来,请继续阅读。


(作为上一个答案的一部分留下)

如果要保存相机拍摄的照片,可以按照以下步骤操作:

您需要将正确的数据传递到Intent中的相机。根据{{​​3}}的Android开发人员文档:

private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
private Uri fileUri;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // create Intent to take a picture and return control to the calling application
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name

    // start the image capture Intent
    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}

...其中方法getOutputMediaFileUri()是您编写的用于创建要保存图像的文件的方法。


有关调用相机应用的详细信息,请参阅以下类似问题:

在那里你会看到更多有用的例子。

答案 1 :(得分:0)

您正在调用Android默认相机应用程序 每个活动都可以接受一组预定义的附加内容,并且也会返回相同的附加内容。 因此,在OnActivityResult

中找不到这种类型的相机意图附加功能

Ex:intent.putExtra(MediaStore.EXTRA_OUTPUT,fileUri);

答案 2 :(得分:0)

替换此行:

MyFragment.startActivityForResult(intentCamera, 1);

有了这个:

getApplicationBaseContext().startActivity(intentCamera);

答案 3 :(得分:-1)

  Bundle bundle = data.getExtras();

您在intent中提取bundle而未在bundle中添加intent。 如果您需要来自intent的字符串,请调用

 data.getStringExtra("Asd")