2010-07-18 16 views
5

मेरे पास एक साधारण सरल ऐप है जो कैमरे को मेनू से लॉन्च करता है। कैमरा ठीक शुरूआत, लेकिन जब मैं एक तस्वीर लेने के बाद ठीक मारा मैं अपने गठजोड़ से एक पर एक एनपीई मिलती है:जब मैं चित्र लेने के लिए ACTION_IMAGE_CAPTURE का उपयोग करता हूं तो मुझे NullPointerException मिल रहा है

E/AndroidRuntime(3891): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=null} to activity {net.asplode.tr/net.asplode.tr.PostImage}: java.lang.NullPointerException 
E/AndroidRuntime(3891): at android.app.ActivityThread.deliverResults(ActivityThread.java:3515) 
E/AndroidRuntime(3891): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3557) 
E/AndroidRuntime(3891): at android.app.ActivityThread.access$2800(ActivityThread.java:125) 
E/AndroidRuntime(3891): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2063) 
E/AndroidRuntime(3891): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(3891): at android.os.Looper.loop(Looper.java:123) 
E/AndroidRuntime(3891): at android.app.ActivityThread.main(ActivityThread.java:4627) 
E/AndroidRuntime(3891): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(3891): at java.lang.reflect.Method.invoke(Method.java:521) 
E/AndroidRuntime(3891): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
E/AndroidRuntime(3891): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
E/AndroidRuntime(3891): at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime(3891): Caused by: java.lang.NullPointerException 
E/AndroidRuntime(3891): at net.asplode.tr.PostImage.onActivityResult(PostImage.java:92) 
E/AndroidRuntime(3891): at android.app.Activity.dispatchActivityResult(Activity.java:3890) 
E/AndroidRuntime(3891): at android.app.ActivityThread.deliverResults(ActivityThread.java:3511) 
E/AndroidRuntime(3891): ... 11 more 
W/ActivityManager( 85): Force finishing activity net.asplode.tr/.PostImage 

कोड:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId() == R.id.mnuCamera) { 
     Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     ContentValues values = new ContentValues(); 
     values.put(Media.TITLE, "image"); 
     Uri tempPhotoUri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values); 
     cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, tempPhotoUri); 
     startActivityForResult(cameraIntent, FROM_CAMERA); 
     return true; 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode != RESULT_OK) { 
     return; 
    } 
    Uri imageUri = data.getData(); 
    Log.i("imageUri: ", imageUri.toString()); 
} 

उत्तर

6

शेयर कैमरा अनुप्रयोग EXTRA_OUTPUT है, जिसके कारण यह शून्य है नहीं भेजता है बाहर कर देता है। हालांकि, कुछ कैमरा ऐप्स (नायक की तरह) करते हैं। बहुत बढ़िया। तो उत्तर EXTRA_OUTPUT निर्दिष्ट करना है। नेक्सस एक कैमरा ऐप उस स्थान पर छवि को सहेज लेगा। फिर AtctivityResult() में जांच करें कि इरादा शून्य है या नहीं। यदि ऐसा नहीं है, तो डेटा.getData() का उपयोग करें, और यदि यह तब स्थिरता के माध्यम से EXTRA_OUTPUT में विशिष्ट स्थान का उपयोग करें और इसे Mediastore में डालें। Urgh।

+0

onActivityResult() यदि आशय रिक्त है, तो कैसे – Abhi

+3

@nsheridan @nsheridan ImagePath प्राप्त करने के लिए - पर परेशान करने के लिए क्षमा करें एक पुराना सवाल, मुझे एक ही समस्या है लेकिन वास्तव में पागल हो रहा है क्योंकि मैं इसे काम नहीं कर सकता। क्या आप अपना समाधान दिखाने के लिए कुछ कोड पोस्ट कर सकते हैं? अग्रिम में ... – Matteo

3

यह वास्तव में एक सवाल की तरह प्रतीत नहीं होता है, और अधिक एक तथ्यात्मक बयान की तरह। आप पूछ रहे हैं, तो क्या रिक्त है, वहाँ दो चीजें हैं जो अशक्त हो सकते हैं:

-इस आशय 'डेटा'
-इस उरी 'imageUri'

आप अतिरिक्त, 'EXTRA_OUTPUT' जोड़ दिया, करने के लिए इरादा? यदि नहीं, तो आप केवल अतिरिक्त फ़ील्ड में एक छोटी आकार की छवि को पुनर्प्राप्त करने में सक्षम होंगे। और यह शायद 'छवि यूरी' पर हो रहा है, यह आपके एनपीई हो सकता है।

+0

आप सही हैं, यह वास्तव में एक प्रश्न नहीं है। मेरा प्रश्न यहां है: क्या कोई मुझे यह इंगित करने में मदद कर सकता है कि मुझे डेटा = शून्य के साथ एक एनपी क्यों मिल रहा है? मैं जानता हूँ कि आशय रिक्त है, स्टैकट्रेस मुझसे कहता है: ResultInfo {जो अशक्त = अनुरोध = 0, परिणाम = -1, डेटा = अशक्त} मैं cameraIntent.putExtra (MediaStore.EXTRA_OUTPUT, tempPhotoUri) है; उपरोक्त कोड में भी। मेरा मानना ​​है कि यह सही है। – nsheridan

+0

क्या आपने स्टैक ओवरफ्लो पर यह अन्य प्रश्न देखा था? http://stackoverflow.com/questions/1910608/android-action-image-capture-intent –

0

पर एक्टिविटी रिसेट को तब कहा जाता है जब आप पहले से ही शुरू हो चुके किसी भी गतिविधि को समाप्त कर देते हैं, इसलिए यदि आप ऐसी गतिविधि शुरू करते हैं जो डेटा नहीं भेजती है तो समस्या होगी।

1

nsheridan के समाधान के आधार पर, मैंने सिर्फ उस फ़ाइल को बनाया है जिसे मैंने इरादे में जोड़ा है (intent.putExtra (MediaStore.EXTRA_OUTPUT, fileUri);) पूरे कक्षा में जाना जाता है। ActivityResult() में, मैंने जांच की है कि क्या इरादा == शून्य है, यदि हां, तो फ़ाइल यूरी वैरिएबल का उपयोग इरादे से प्राप्त करने की कोशिश करने के बजाय किया जाता है .getData()।

अब मेरे लिए ठीक काम करता है।

संबंधित मुद्दे

 संबंधित मुद्दे