【问题标题】:When pressed back button, i got Force Close in Android当按下返回按钮时,我在 Android 中强制关闭
【发布时间】:2012-05-20 13:24:29
【问题描述】:

在我的活动中,我可以去画廊并可以选择图像。之后我可以回到以前的sreecn。但是当我去画廊时,如果我不选择图像并按下后退按钮,我无法转到上一个屏幕并且我强制关闭。如何在不使用 startActivity(intent) 的情况下解决这个问题? 这是我的代码: 首先我定义为

private static final int ACTIVITY_REQUEST_PICK_ATTACHMENT = 1;

关于活动结果代码:

protected void onActivityResult(int requestCode, int resultCode,
            Intent data) {




    super.onActivityResult(requestCode, resultCode, data);

            mAttachments = (LinearLayout) findViewById(R.id.attachments);

            switch (requestCode) {
            case ACTIVITY_REQUEST_PICK_ATTACHMENT:

                Uri _uri = data.getData();

                addAttachment(_uri);

                Cursor cursor = getContentResolver()
                        .query(_uri,
                                new String[] { android.provider.MediaStore.Images.ImageColumns.DATA },
                                null, null, null);
                cursor.moveToFirst();
                File imageFilePath = new File(cursor.getString(0));
                uris.add(imageFilePath);
                names.add(imageFilePath.getName());

                Log.v("imageFilePath", imageFilePath.toString());
                break;

我在这里称它为:

private void onAddAttachment2(final String mime_type) {

        // setContentView(R.layout.main);

        Intent i = new Intent(Intent.ACTION_GET_CONTENT);
        i.addCategory(Intent.CATEGORY_OPENABLE);
        i.setType(mime_type);
        startActivityForResult(Intent.createChooser(i, null),
                ACTIVITY_REQUEST_PICK_ATTACHMENT);
    }

我的 LogCat 上的错误

05-20 13:16:39.809: E/AndroidRuntime(374):  at my.mail.SenderActivity.onActivityResult(KepenekActivity.java:294)

当我双击错误时,它会显示该行

Uri _uri = data.getData();

逻辑上是真的,我的 _uri 是空的,我怎么能在这个最终状态下显示上一个屏幕,这是我的问题。

【问题讨论】:

  • 在案例 ACTIVITY_REQUEST_PICK_ATTACHMENT 之后添加 if( data != null && data.getData() != null):

标签: android android-emulator android-gallery android-image


【解决方案1】:

您需要为结果代码添加检查。

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

    mAttachments = (LinearLayout) findViewById(R.id.attachments);

    switch (requestCode) {
        case ACTIVITY_REQUEST_PICK_ATTACHMENT:
            if (resultCode == RESULT_OK) { // <------ THIS LINE IS IMPORTANT
                Uri _uri = data.getData();

                addAttachment(_uri);

                Cursor cursor = getContentResolver()
                    .query(_uri,
                            new String[] { android.provider.MediaStore.Images.ImageColumns.DATA },
                            null, null, null);
                cursor.moveToFirst();
                File imageFilePath = new File(cursor.getString(0));
                uris.add(imageFilePath);
                names.add(imageFilePath.getName());

                Log.v("imageFilePath", imageFilePath.toString());
            }
            break;

如果您按下后退按钮而不是选择某些内容,则 resultCode 将设置为 RESULT_CANCELLED 而不是 RESULT_OK。无论哪种情况,您都可以利用这种区别来做任何您需要做的事情。

【讨论】:

  • 非常感谢。我在其他情况下使用了 RESULT_OK 但我忘记在那里使用它 = )
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 2013-10-17
相关资源
最近更新 更多