我制作了一个带有按钮(用于扫描)和 webview 组件的 android 应用程序。如果 button_scan 被按下,它将执行 startActivityForResult 调用活动 zxing 扫描条形码和二维码。zxing完成后,我写onActivityResult来处理数据。
该应用程序目前在Android V2.2.2上运行良好,没有出现异常。
但是,如果这个应用程序在 Android V2.3 或 V4.0.4 上运行,它会弹出一个异常(java.lang.RuntimeException: Unable to resume activity)。调用 onActivityResult 时会发生此异常。
我打印了全局变量(CURRENTWEBPAGE)进行测试,发现在调用 startActivityForResult 之前,CURRENTWEBPAGE 有值,但在调用 onActivityResult 后 CURRENTWEBPAGE 为空。
我很好奇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
嗨,我发现父应用程序(我的应用程序)的 onCreate 将在 onActivityResult 之前被调用。尽管将这些变量保留在 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>