从 onActivityResult 参数传递的 Intent 如何与我的应用程序一起使用?

How does the Intent passed from the onActivityResult argument work with my application?

@Override
    public void onActivityResult(int reqCode, int resultCode, **Intent data**){
        super.onActivityResult(reqCode, resultCode, **data**);

        switch (reqCode) {
            case (PICK_CONTACT) :
                if (resultCode == Activity.RESULT_OK) {

                    Uri contactData = **data**.getData();
                    Cursor c =  getContentResolver().query(**contactData**, null, null, null, null);
                    if (c.moveToFirst()) {
                        String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                        // TODO Whatever you want to do with the selected contact name.
                       //ImageView imageView = (ImageView)findViewById(R.id.imageView);
                       //Picasso.with(this).load("https://cms-assets.tutsplus.com/uploads/users/21/posts/19431/featured_image/CodeFeature.jpg").into(imageView);
                        FragmentManager FM = getFragmentManager();
                        FragmentTransaction FT = FM.beginTransaction();
                        FragmentActivity F1 = new FragmentActivity();



                        FT.add(R.id.frame_layout, F1);
                        FT.commit();

                    }
                }
                break;
        }

    }

有人可以解释一下 onActivityResult 参数中的 data 变量是如何用来使这段代码工作的吗?

我看到该变量用于调用 getData(),但我对这个变量如何连接到此方法之外的 Intent 感到困惑。 此外,调用 data.getData() 到底做了什么?

基本上我正在尝试理解这段代码

 public void onActivityResult(int reqCode, int resultCode, Intent data){
        super.onActivityResult(reqCode, resultCode, data);

        switch (reqCode) {
            case (PICK_CONTACT) :
                if (resultCode == Activity.RESULT_OK) {

                    Uri contactData = data.getData();
                    Cursor c =  getContentResolver().query(contactData, null, null, null, null);

谁能帮我解释一下?

看这里:Click me and than the first answer

在 link 你可以看到你可以给 Intent data 一个包或额外的东西,你用你的 getData() 方法得到。

假设被调用的Activity(由startActivityForResult()启动)在完成之前设置结果如下:

Intent data = new Intent();
data.putExtra ("aValue", 42);
getActivity().setResult(Activity.RESULT_OK, data);
finish();

为了获取调用activity中的值,使用

public void onActivityResult(int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
        case (PICK_CONTACT) :
            if (resultCode == Activity.RESULT_OK) {
                int aValue = data.getIntExtra("aValue", -1);
            ....
    }
}

这个例子是基于一个int,但是,还有很多其他的值类型可以被传递。请参阅 Androids Intent 文档。

p.s.:让我补充一点,它与 void Intent.setData(Uri)Uri Intent.getData() 的工作方式相同,而不是 putExtra(...)getExtra(...)

数据变量是您在结尾 Activity 中指定的 Intent。当你想完成用 startActivityForResult() 调用的 Activity 时,你应该调用 setResult()。

作为第一个参数,您应该设置结果代码(RESULT_OKRESULT_CANCELED、...)。您还可以添加第二个,它应该是一个 Intent,它将包含您希望在 onActivityResult() 中接收的信息。那就是onActivityResult()中的数据变量。

如果您想了解更多关于 getData() 的信息,您可以查看:http://developer.android.com/reference/android/content/Intent.html#getData()