android - 传递给主要 Activity 的数据丢失

标签 android android-intent android-activity

这个问题让我苦苦思索了好几天都无济于事。简而言之,我有两个 Activity,为了示例起见,我将它们称为 MainActivitySearchActivityMainActivity 有一个按钮,可将您带到搜索屏幕,即 SearchActivity 并且我有一个带有预设值的按钮,我想将其传回给 主 Activity 。到目前为止,一切都很好。我单击调试器中的按钮,我可以看到我的额外值,下一个断点位于 MainActivity 的 onCreate 中,当我获得额外值时,什么都没有,没有,都消失了。所以这是重要的部分,代码:

MainActivity.class

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


        btnSearch.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent search = new Intent(v.this, SearchActivity.class);
                startActivityForResult(search, SEARCH_VIDEO_REQUEST);
            }
        });
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == SEARCH_VIDEO_REQUEST) {
            if (resultCode == RESULT_OK) {
                String url = data.getExtras().getString("VIDEO_URL");
                if (url != null) {
                    txtUrl.setText(url);
                }
            }
        }
    }
}

SearchActivity.class

public class SearchActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        btnSend.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                String videoUrl = "http://video-url.com";
                Intent data = new Intent(SearchActivity.this, MainActivity.class);
                data.putExtra("VIDEO_URL", videoUrl);
                setResult(RESULT_OK, data);
                finish();
            }
        });
    }
}

AndroidManifest.xml

<activity
    android:name="com.project.MainActivity"
    android:label="@string/app_name"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:theme="@android:style/Theme.Black.NoTitleBar"
    android:screenOrientation="portrait">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="text/plain"/>
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.MEDIA_MOUNTED"/>
        <data android:scheme="file"/>
    </intent-filter>
</activity>
<activity
    android:name="com.project.SearchActivity"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar"
    android:screenOrientation="portrait">
</activity>

最佳答案

问题在于返回结果的类。

正如 Mikel 在另一个回答中指出的那样:

Intent(Context packageContext, Class cls) 在 API 级别 1 中添加

Create an intent for a specific component. All other fields (action, data, type, class) are null, though they can be modified later with explicit calls. This provides a convenient way to create an intent that is intended to execute a hard-coded class name, rather than relying on the system to find an appropriate class for you; see setComponent(ComponentName) for more information on the repercussions of this.

您并未如上述文档所述明确设置数据参数,而是试图将 Extra 添加到失败的空数据对象。

相反,我会将您的类(class)更改为以下内容:

public class SearchActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        btnSend.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                String videoUrl = "http://video-url.com";
                Intent data = new Intent();
                data.putExtra("VIDEO_URL", videoUrl);
                setResult(RESULT_OK, data);
                finish();
            }
        });
    }
}

这将初始化您的 Intent 并允许您向其添加额外数据(这也是您发回数据的正常方式,通常不需要发回与特定 Intent 相关的结果。

关于android - 传递给主要 Activity 的数据丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17688272/

相关文章:

android - 如何在设备方向改变时停止再次调用 Activity?

android - BroadcastReceiver 多久监听一次 Intents

java - SSL/TLS 动态 key 生成

android - Invalidate 不会重绘屏幕。安卓

java - "new"关键字在哪里? Android教程困境

android - 如何在使用 emailIntent 发送电子邮件后自动隐藏键盘

android系统动画时长

存在 startActivityForResult 调用的 Android 程序流控制

android - 按返回键后黑屏

带有 Volley : sending objects via POST parameters 的 Android