Note that there are some explanatory texts on larger screens.

plurals
  1. POString variable ends up null, and I do not know why
    primarykey
    data
    text
    <p>I have been trying hard to create an activity which allows a user to take a photo and email this image using intents. I create the file name and store it in a string, but it eventually gets it value taken away. When it was being reset to null I ended up creating another string variable to hold its value so I could ensure nothing had access to changing its value, but the second string also ends up as null. I use the value of the string and pass it to the intent in order to add the just taken image as an attachment. Can anyone see why and how this variable is having its value changed?</p> <p>Here is my class, with comments:</p> <pre><code>public class ImproveActivity extends Activity implements OnClickListener{ private static final String JPEG_FILE_PREFIX = "Improve_"; private static final String JPEG_FILE_SUFFIX = ".jpg"; private Bitmap mImageBitmap; private ImageView mImageView; private File storageDir; private String mCurrentPhotoPath; Button share, capture; private String _path; private File f; //This variable holds file name private String imageFileName; //I am storing the file name variable here to keep its value private String temp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.improve_layout); mImageView = (ImageView)findViewById(R.id.imgview); capture = (Button)findViewById(R.id.capture); share = (Button)findViewById(R.id.share); capture.setOnClickListener(this); share.setOnClickListener(this); } private void dispatchTakePictureIntent() { if(isIntentAvailable(getApplicationContext(), MediaStore.ACTION_IMAGE_CAPTURE)){ Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); ; try { //f is the image f = createImageFile(); takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); startActivityForResult(takePictureIntent, 1); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); Toast.makeText(getApplicationContext(), "error creating image", Toast.LENGTH_LONG).show(); } } else{ Toast.makeText(getApplicationContext(), "no camera available", Toast.LENGTH_LONG).show(); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent intent){ Toast.makeText(getApplicationContext(), "returning", Toast.LENGTH_LONG).show(); if (requestCode == 1) { mImageBitmap = BitmapFactory.decodeFile(mCurrentPhotoPath); if (mImageBitmap == null) { // bitmap still null } else { // set bitmap in imageview mImageView.setImageBitmap(mImageBitmap); } } } private File createImageFile() throws IOException { // Create an image file name String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); imageFileName = JPEG_FILE_PREFIX + timeStamp + "_"; //display the current image file name Toast.makeText(getApplicationContext(), imageFileName, Toast.LENGTH_LONG).show(); File file = new File(getAlbumDir().getAbsolutePath()); file.mkdirs(); Toast.makeText(getApplicationContext(), imageFileName, Toast.LENGTH_LONG).show(); File image = File.createTempFile( imageFileName, JPEG_FILE_SUFFIX ); mCurrentPhotoPath = image.getAbsolutePath(); temp = imageFileName; return image; } private File getAlbumDir() { return storageDir = new File( Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_DCIM ), "Camera" ); } public static boolean isIntentAvailable(Context context, String action) { final PackageManager packageManager = context.getPackageManager(); final Intent intent = new Intent(action); List&lt;ResolveInfo&gt; list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); return list.size() &gt; 0; } @Override public void onClick(View v) { switch(v.getId()){ case R.id.capture : dispatchTakePictureIntent(); //displaying the value of the string imageFileName, it is what it should be, the file name Toast.makeText(getApplicationContext(), imageFileName, Toast.LENGTH_LONG).show(); //displaying the file name in temp at this point it is still the file name I need Toast.makeText(getApplicationContext(), "temp is " +temp, Toast.LENGTH_LONG).show(); break; //Once the image is saved, clicking share to open chooser case R.id.share: //displaying the temp string the file name is gone it is now null ???? Toast.makeText(getApplicationContext(), "temp is " +temp, Toast.LENGTH_LONG).show(); Intent picMessageIntent = new Intent(android.content.Intent.ACTION_SEND); picMessageIntent.setType("image/jpg"); File downloadedPic = new File( Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_DCIM), "Camera/"+ temp+"jpg"); //I want to use the file name string to send the image via email picMessageIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(downloadedPic)); startActivity(Intent.createChooser(picMessageIntent, "Send your picture using:")); break; } } </code></pre> <p>If anyone could shed some light on how this is happening I would be grateful.</p> <p>Here is the logcat, I open the activity, take a photo, save it, then it goes back to the activity view, I press share and the toast displays the value of temp while the chooser opens.</p> <pre><code>11-25 17:56:34.573: D/dalvikvm(12037): GC_EXTERNAL_ALLOC freed 1176 objects / 87312 bytes in 53ms 11-25 17:56:39.313: W/IInputConnectionWrapper(12037): showStatusIcon on inactive InputConnection 11-25 17:56:49.803: W/System.err(12037): java.lang.NullPointerException: Argument must not be null 11-25 17:56:49.808: W/System.err(12037): at java.io.FileInputStream.&lt;init&gt;(FileInputStream.java:78) 11-25 17:56:49.808: W/System.err(12037): at java.io.FileInputStream.&lt;init&gt;(FileInputStream.java:134) 11-25 17:56:49.808: W/System.err(12037): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:349) 11-25 17:56:49.808: W/System.err(12037): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:399) 11-25 17:56:49.808: W/System.err(12037): at com.seweb.app.ImproveActivity.onActivityResult(ImproveActivity.java:94) 11-25 17:56:49.808: W/System.err(12037): at android.app.Activity.dispatchActivityResult(Activity.java:3890) 11-25 17:56:49.808: W/System.err(12037): at android.app.ActivityThread.deliverResults(ActivityThread.java:3511) 11-25 17:56:49.808: W/System.err(12037): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3115) 11-25 17:56:49.808: W/System.err(12037): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3143) 11-25 17:56:49.813: W/System.err(12037): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2684) 11-25 17:56:49.813: W/System.err(12037): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3815) 11-25 17:56:49.813: W/System.err(12037): at android.app.ActivityThread.access$2400(ActivityThread.java:125) 11-25 17:56:49.813: W/System.err(12037): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2037) 11-25 17:56:49.818: W/System.err(12037): at android.os.Handler.dispatchMessage(Handler.java:99) 11-25 17:56:49.818: W/System.err(12037): at android.os.Looper.loop(Looper.java:123) 11-25 17:56:49.818: W/System.err(12037): at android.app.ActivityThread.main(ActivityThread.java:4627) 11-25 17:56:49.818: W/System.err(12037): at java.lang.reflect.Method.invokeNative(Native Method) 11-25 17:56:49.818: W/System.err(12037): at java.lang.reflect.Method.invoke(Method.java:521) 11-25 17:56:49.823: W/System.err(12037): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 11-25 17:56:49.823: W/System.err(12037): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 11-25 17:56:49.823: W/System.err(12037): at dalvik.system.NativeStart.main(Native Method) 11-25 17:56:50.273: D/dalvikvm(12037): GC_EXTERNAL_ALLOC freed 1920 objects / 108152 bytes in 136ms </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload