2012-09-19 2 views
0

버튼 (스캔 용)과 webview 구성 요소로 안드로이드 앱을 만들었습니다. 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 가치를 가지고 있다는 것을 발견하지만, CURRENTWEBPAGE는 onActivityResult를 호출 후 null의했다.

나는 안드로이드 버전이이 사건에서 중요한지 궁금해. 모든 글로벌 회원이 삭제됩니까?

이 상황을 해결 한 사람이라면 누구나이 문제를 해결할 수있는 해결책을 제공 할 수 있습니까?

필요한 추가 정보가 있으면 언제든지 알려주십시오.

귀하의 회신은 부탁드립니다.

다음은 내 앱 코드입니다.

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의 웹보기는 새 세션 ID로 다시 작성됩니다. 바코드를 스캔 한 후 파괴 된 웹보기의 캐시에 로그인 한 권한으로 요청을 보내야하므로이 기능은 저에게 적합하지 않습니다. 부모 앱을 삭제하지 못하게 할 방법이 있습니까?

다음은 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

당신의 응용 프로그램에서 문제는 메모리에서 호출 활동을 제거한 안드로이드 가비지 수집기입니다. CURRENTWEBPAGE를 정적으로 만드십시오.

관련 문제