不同的版本,在onActivityResult调用时无法恢复活动

时间:2012-09-19 05:42:40

标签: android exception

我制作了一个带有按钮(用于扫描)和webview组件的Android应用程序。 如果按下button_scan,它将执行startActivityForResult来调用活动zxing来扫描条形码和QR码。 zxing完成后,我写了onActivityResult来处理数据。

此应用程序在Android V2.2.2上运行良好,直到现在,并且没有异常发生。

但是,如果此应用程序在Android V2.3或V4.0.4上运行,则会发生异常(java.lang.RuntimeException:无法恢复活动)。 调用onActivityResult时会发生此异常。

我打印了全局变量(CURRENTWEBPAGE)进行测试,发现在调用startActivityForResult之前,CURRENTWEBPAGE有值,但是 调用onActivityResult后,CURRENTWEBPAGE为null。

我很好奇Android的版本是否重要。 是否会清除所有全球成员?

任何碰到这种情况的人都可以给我一个解决方案来解决这个问题吗?

如果您需要更多信息,请随时告诉我。

您的回复将不胜感激。

以下是我的应用代码。

public class MyApp extends Activity
{
    private String CURRENTWEBPAGE;//which will be set value whenvever webview changed.
    private WebView webView_main;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        initActivity_web();
        ...
            ...
    }

    public void initActivity_web()
    {

        // add Listener to button_SCAN
        ((Button) findViewById(R.id.button_SCAN)).setOnClickListener(new Button.OnClickListener()
        {
            @Override
            public void onClick(View arg0)
            {
                try
                {
                    Intent intent = new Intent("com.google.zxing.client.android.SCAN");

                    Log.d(this.getClass().getName(),CURRENTWEBPAGE);
                    // CURRENTWEBPAGE has value here.

                    startActivityForResult(intent, 0);
                }
                catch (android.content.ActivityNotFoundException ex)
                {
                    Toast popup = Toast.makeText(NEOMove.this, "Please install Zxing Barcode Scanner", Toast.LENGTH_SHORT);
                    popup.show();

                }

            }
        });
    }


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent)
    {
        super.onActivityResult(requestCode, resultCode, intent);

        if (requestCode == 0)
        {
            if (resultCode == RESULT_OK)
            {
                String QRCodeContent = intent.getStringExtra("SCAN_RESULT");

                String newURL =  convertToLCMOBILESUPPORTActionUrl(CURRENTWEBPAGE);//exception occur
                //because CURRENTWEBPAGE = null;
                //java.lang.RuntimeException: Unable to resume activity

                webView_main.loadUrl(newURL  + QRCodeContent);
            }
            else if (resultCode == RESULT_CANCELED)
            {
                // TODO Handle cancel
            }
        }
    }
}

添加 - 2012/09/20

您好, 我发现在onActivityResult之前将调用父应用程序(我的应用程序)的onCreate。 尽管将这些变量保存在SharedPreferences中,但MyApp的webview将使用新的会话ID重新创建。 这对我不起作用,因为在扫描条形码后,我需要发送一个具有登录被破坏的webview缓存的权限的请求。 有没有办法让父应用程序不被销毁?

以下是我的AndroidManifest.xml。

        <activity
            android:name=".MyApp"
            android:configChanges="orientation|keyboard"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

1 个答案:

答案 0 :(得分:0)

你的app中的问题是android垃圾收集器已经从内存中删除了调用活动。尝试将CURRENTWEBPAGE设为静态。

static private String CURRENTWEBPAGE;