2012-03-19 6 views
5

के बाद एक टुकड़ा लॉन्च करना यदि मैंने ZXing 2.0 लाइब्रेरी के माध्यम से एक क्यूआर-कोड स्कैन किया है तो मुझे एक टुकड़ा लॉन्च करते समय कुछ समस्याएं आई हैं।ZXing 2.0 क्यूआर-कोड स्कैन

@Override 
    public void onCreate(Bundle bundle) { 
     // TODO Auto-generated method stub 
     super.onCreate(bundle); 
     setContentView(R.layout.scan_qr_code); 

     Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
     intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); 
     startActivityForResult(intent, 0); 
    } 

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
     if (requestCode == 0) 
     { 
      if (resultCode == RESULT_OK) 
      { 
       String contents = intent.getStringExtra("SCAN_RESULT"); 
       String format = intent.getStringExtra("SCAN_RESULT_FORMAT"); 
       // Handle successful scan 
       Log.d("MENU", "Scan result: " + contents + " as " + format); 

       // Load details for qr code 
        FragmentTransaction fragmentTransaction = getSupportFragmentManager() 
          .beginTransaction(); 

        Fragment fragmentDetails = new FragmentDetails(
          contents); 

        fragmentTransaction 
          .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
        fragmentTransaction.replace(R.id.fragment_main, 
          fragmentDetails); 
        fragmentTransaction.addToBackStack(null); 
        fragmentTransaction.commit(); 
      } 
      else if (resultCode == RESULT_CANCELED) 
      { 
       // Handle cancel 
       Log.d("MENU", "Scan canceled"); 
      } 
     } 
    } 

I'am सोच कि ऐसा क्यों होता है: जब मैं इस कोड निष्पादित

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { act=com.google.zxing.client.android.SCAN flg=0x80000 (has extras) }} to activity {fraiss.yucrowd/fraiss.yucrowd.activities.ScanQrCode}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState* 

:

मैं इस अपवाद मिला है। क्या ActivityResult के अंत में एक टुकड़ा-लेनदेन लॉन्च करना संभव नहीं है?

Thx अग्रिम में आपकी सहायता के लिए।

उत्तर

2

यह मूल रूप से होता है क्योंकि onActivityResultonSaveInstanceState के बाद बुलाया जा रहा है, इसलिए संदेश: 'SaveInstanceState पर इस क्रिया को निष्पादित नहीं कर सकता'। अनुरोध कोड, परिणाम कोड और मंशा को बचाएं और onResume में चेक करें यदि आपके पास काम करने के लिए कुछ भी है।

7

onActivityResult के लिए onResume से पहले कॉल किया जा सकता है और गतिविधि को कम से कम onResume कहने से पहले आप नए टुकड़े नहीं जोड़ सकते हैं।

इसलिए आपको onActivityResult में मिले डेटा को स्टोर करने की आवश्यकता है, इसे onResume में देखें और वहां अपना फ्रैगमेंट परिवर्तन करें।