इरादे के माध्यम से बिटमैप पास करते समय शून्य सूचक अपवाद

मैं एक गतिविधि से बीआईटीएमएपी [] को एक गतिविधि से दूसरे तक इरादे का उपयोग करने की कोशिश कर रहा हूं। लेकिन, यह पारित नहीं हो रहा है, जिसके परिणामस्वरूप मुझे लगता है कि एक नल पॉइंटर अपवाद है। मैं कैमरे के साथ चार छवियों को ले रहा हूं और उन्हें बिटमैप [] में संग्रहीत कर रहा हूं, जिसे मैं दूसरी गतिविधि में जाने की कोशिश कर रहा हूं। लॉगकैट का कहना है कि त्रुटि 94 पर है, जहां बीतमैप पास किया गया है। यहां कोड (केवल प्रासंगिक भाग) है। कृपया मदद करें, अग्रिम धन्यवाद!

Pic.java ले लो:

onCreateMethod:

         @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.takepic);
    initializeVar();
    storeInArray(images);

}

चार छवि दृश्यों (जो कैमरा गतिविधि शुरू करते हैं) के लिए ऑनएक्टिविटी परिणाम:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    if (requestCode == 1 && resultCode == RESULT_OK) {  
        photo1 = (Bitmap) data.getExtras().get("data"); 
        imageView1.setImageBitmap(photo1);
    } if(requestCode == 2 && resultCode == RESULT_OK) {
        photo2 = (Bitmap) data.getExtras().get("data");
        imageView2.setImageBitmap(photo2);
    } if(requestCode == 3 && resultCode == RESULT_OK) {
        photo3 = (Bitmap) data.getExtras().get("data");
        imageView3.setImageBitmap(photo3);
    } if(requestCode == 4 && resultCode == RESULT_OK) {
        photo4 = (Bitmap) data.getExtras().get("data");
        imageView4.setImageBitmap(photo4);      
    }
}

सरणी में अलग-अलग बिटमैप्स को स्टोर करने का तरीका:

      private Bitmap[] storeInArray(Bitmap[] bitmap) {
       //TODO Auto-generated method stub
     if(photo1 != null){
         bitmap[i]= photo1;
         i++;
    }if(photo2 != null){
        bitmap[i]= photo2;
         i++;
    }if(photo3 != null){
        bitmap[i]= photo3;
         i++;
    }if(photo4 != null){
        bitmap[i]= photo4;
         i++;
    }

    return bitmap;
 }

और अंत में, बटन के लिए ऑनक्लिक लिस्टनर:

      bCamEmail.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
           //TODO Auto-generated method stub
            Intent i = new Intent(TakePic.this,NewEmail.class);
            i.putExtra("Image",images);
            startActivity(i);
        }
    });

और दूसरी कक्षा में:

       extras = getIntent().getExtras();
    if(extras!=null)
        receive = (Bitmap[]) extras.getParcelableArray("Image");

और ईमेल भेजने के लिए बटन:

       newSend.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
           //TODO Auto-generated method stub
            convertEditTextToString();
            Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE);
            emailIntent.setType("text/plain");
            emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,"[email protected]");
            emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,newSubject);
            emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,newContent);

            newUris = new ArrayList();

            for(String file : images) {
                File fileIn = new File(file);
                Uri u = Uri.fromFile(fileIn);
                newUris.add(u);
            }

            emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, newUris);
            startActivity(emailIntent);
        }
    });


}

public String[] BitMapToString(Bitmap bitmap[]){
    int i=0;
     String[] temp= new String[2000];
    while(bitmap[i] !=null){
    ByteArrayOutputStream baos=new  ByteArrayOutputStream();
    bitmap[i].compress(Bitmap.CompressFormat.PNG,100, baos);
    byte [] b=baos.toByteArray();
    temp[i]=Base64.encodeToString(b, Base64.DEFAULT);
    i++;
    }
    return temp;
 }

अंत में, लॉगकैट:

     12-05 13:34:04.207: W/dalvikvm(3846): threadid=1: thread exiting with uncaught exception (group=0x40e62498)
     12-05 13:34:04.207: E/test(3846): Exception
     12-05 13:34:04.227: E/AndroidRuntime(3846): FATAL EXCEPTION: main
     12-05 13:34:04.227: E/AndroidRuntime(3846): java.lang.NullPointerException
     12-05 13:34:04.227: E/AndroidRuntime(3846):    at com.example.bethechange.NewEmail$1.onClick(NewEmail.java:94)
     12-05 13:34:04.227: E/AndroidRuntime(3846):    at android.view.View.performClick(View.java:4106)
     12-05 13:34:04.227: E/AndroidRuntime(3846):    at android.view.View$PerformClick.run(View.java:17150)
     12-05 13:34:04.227: E/AndroidRuntime(3846):    at android.os.Handler.handleCallback(Handler.java:615)
     12-05 13:34:04.227: E/AndroidRuntime(3846):    at android.os.Handler.dispatchMessage(Handler.java:92)
     12-05 13:34:04.227: E/AndroidRuntime(3846):    at android.os.Looper.loop(Looper.java:137)
     12-05 13:34:04.227: E/AndroidRuntime(3846):    at android.app.ActivityThread.main(ActivityThread.java:4792)
     12-05 13:34:04.227: E/AndroidRuntime(3846):    at java.lang.reflect.Method.invokeNative(Native Method)
     12-05 13:34:04.227: E/AndroidRuntime(3846):    at java.lang.reflect.Method.invoke(Method.java:511)
     12-05 13:34:04.227: E/AndroidRuntime(3846):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:808)
     12-05 13:34:04.227: E/AndroidRuntime(3846):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:575)
     12-05 13:34:04.227: E/AndroidRuntime(3846):    at dalvik.system.NativeStart.main(Native Method)
1
सुनिश्चित करें कि आपने अपने बिटमैप [] को उचित आकार के साथ शुरू किया है!
जोड़ा लेखक Lalit Poptani, स्रोत
जी हां निश्चित तौर पर!!!
जोड़ा लेखक Lalit Poptani, स्रोत
इरादे से छवियों को रखने की सिफारिश नहीं की जाती है। छवि को फ़ाइल में बेहतर सेव करें और फ़ाइल का पथ अगली कक्षा में भेजें।
जोड़ा लेखक Rethinavel Pillai, स्रोत
@ sayed.jalil यह है (स्ट्रिंग फ़ाइल: छवियों) {.. यह लाइन ..
जोड़ा लेखक user2125722, स्रोत
@ sayed.jalil हाँ, मेरे पास है। ऐसा लगता है कि बिटमैप छवियों को बिटमैप में संग्रहीत नहीं किया जा रहा है []।
जोड़ा लेखक user2125722, स्रोत
@LalitPoptani आप मतलब है, बिटमैप की तरह [] छवियों = नया बिटमैप [आकार]?
जोड़ा लेखक user2125722, स्रोत
@LalitPoptani अब, यह कहता है कि इस लाइन पर एक शून्य सूचक है: प्राप्त = (बिटमैप []) extras1.getParcelableArrayExtra ("छवि"); क्या करें ?
जोड़ा लेखक user2125722, स्रोत
लॉगकैट का कहना है कि त्रुटि NewEmail.java:94 पर होती है। वह रेखा कौन सा है?
जोड़ा लेखक Sayed Jalil Hassan, स्रोत
प्राप्त = (बिटमैप []) extras.getParcelableArray ("छवि"); आप छवियों को "प्राप्त" में प्राप्त करते हैं लेकिन आप "छवियों" पर फिर से चल रहे हैं। पक्की बात ? आपने बाद में "छवियों" को "प्राप्त" सौंपा है?
जोड़ा लेखक Sayed Jalil Hassan, स्रोत

2 उत्तर

इरादे से दूसरी गतिविधि में बिटमैप सरणी पास न करें। बिटमैप शायद बड़ी फाइल है। यह "ट्रांज़ेक्शनटूलार्ज एक्सेप्शन" का कारण बन जाएगा

आपके पास इसे ठीक करने के 2 तरीके हैं:

1: ग्लोबल सिंगलटन का उपयोग करें (यदि बिटमैप्स अस्थायी डेटा फाइलों में मौजूद नहीं हैं)

2: बिटमैप फ़ाइल पथ पास करें

0
जोड़ा
एक वैश्विक सिंगलटन ऑब्जेक्ट का उपयोग करें, फिर आप उस ऑब्जेक्ट में अपनी बिटमैप सरणी डाल सकते हैं और इसे वैश्विक ऑब्जेक्ट के माध्यम से एक्सेस कर सकते हैं। इस तरह: DataCenter.getSingleton ()। GetMyBitmaps ()
जोड़ा लेखक MengMeng, स्रोत
मैं पहली विधि को समझ नहीं पाया। : /
जोड़ा लेखक user2125722, स्रोत

इरादा कैमराइन्टेंट = नया इरादा (android.provider.MediaStore.ACTION_IMAGE_CAPTURE);               startActivityForResult (कैमराइन्टेंट, CAMERA_REQUEST) ;;

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAMERA_REQUEST) {
        try {
             photo = (Bitmap) data.getExtras().get("data");



        } catch (Exception e) {
           //TODO: handle exception
        }

    }
}
0
जोड़ा