2012-09-19 81 views
0

我製作了一個帶有按鈕(用於掃描)和webview組件的android應用程序。 如果button_scan被按下,它將執行startActivityForResult來調用活動zxing來掃描條形碼和QR碼。 zxing完成後,我編寫onActivityResult來處理數據。不同的版本,當onActivityResult調用時無法恢復活動

此應用在Android V2.2.2上運行良好,直到現在,並沒有發生異常。

但是,如果此應用運行在Android V2.3或V4.0.4上,它將會拋出一個異常(java.lang.RuntimeException:無法恢復活動)。 當調用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年9月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> 

回答

0

在你的應用程序的問題是從內存中刪除調用活動的Android垃圾收集器。嘗試使CURRENTWEBPAGE靜態。

static private String CURRENTWEBPAGE; 
相關問題