Intent extras 返回 null
Posted
技术标签:
【中文标题】Intent extras 返回 null【英文标题】:Intent extras return null 【发布时间】:2014-11-16 08:36:08 【问题描述】:我从 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;
【问题讨论】:
@RichardLeMesurier 我编辑我的代码。 你在哪里返回结果? 对于任何试图在捕获后传递任何值的人,只需使用public variable
或 public static variable
没有其他方法(也许有?但我这样做)。
【参考方案1】:
相机应用不会返回您的自定义字符串“Asd” - 它不是这样工作的。
您可以期望将照片图像或图像文件返回给您。
如果您只是询问“Asd”,那么这就是您的答案 - 您不会得到它。如果您问为什么没有图片返回,请继续阅读。
(作为先前答案的一部分保留)
如果您想保存相机拍摄的照片,您可以按照以下步骤操作:
您需要在Intent
中将正确的数据传递给相机。根据image capture Intent 的 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()
方法是您编写的用于创建要保存图像的文件的方法。
有关调用相机应用的更多信息,请参阅以下类似问题:
Android Camera : data intent returns null android camera: onActivityResult() intent is null if it had extras Camera activity returning null android在那里你会看到更多的工作示例。
【讨论】:
我可以用位图 photo = (Bitmap) data.getExtras().get("data");代码。没有问题。但是我无法获取字符串额外参数。Intent getstringextra return null @lol 是的,这是正确的,那么它只是您想要的“Asd”吗?不幸的是,你不能拥有它...... 我想将图像名称拉到意图。因为我想保存为不同名称的图像。 @lol 如果要保存图像,则必须根据我的答案中的示例调用应用程序 - 请注意,您传入图像将被写入的文件的 URI。然后,相机应用应保存图像,而不是将整个图像返回给您。【参考方案2】:您正在调用 android 默认相机应用程序 每个活动都可以接受一组预定义的附加内容,并且也将返回相同的内容。 因此,在 OnActivityResult 中找不到此类相机意图的附加功能
例如:intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
【讨论】:
【参考方案3】:替换这一行:
MyFragment.startActivityForResult(intentCamera, 1);
有了这个:
getApplicationBaseContext().startActivity(intentCamera);
【讨论】:
【参考方案4】: Bundle bundle = data.getExtras();
您将intent
拉到bundle
中,而没有在intent
中添加bundle
。
如果您需要直接来自意图的字符串,请调用
data.getStringExtra("Asd")
【讨论】:
以上是关于Intent extras 返回 null的主要内容,如果未能解决你的问题,请参考以下文章
java [Intent Extras to String]转换Intent的Extras为可读的String #Android
使用声明为“Bundle”对象的空变量初始化“intent.extras”
Android:Intent.EXTRA_ALLOW_MULTIPLE 只允许单选
无法在 Intent 中传递自定义对象:方法 Put Extra 对于 Intent 类型不明确
如何在意图“Intent.EXTRA_ALLOW_MULTIPLE”上设置最大文件选择计数。用户最多可以选择一定的限制?