Android 位图空对象引用
Android Bitmap null object reference
这是我的例外:
E/UploadBill: Error writing bitmap
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference
at kmsg.com.onetouch.activity.UploadDocumentActivity$UploadBill.doInBackground(UploadDocumentActivity.java:299)
at kmsg.com.onetouch.activity.UploadDocumentActivity$UploadBill.doInBackground(UploadDocumentActivity.java:279)
这是我的代码:
File imageFile;
Bitmap photo;
这是我点击的按钮:
public void getFile(View view) {
if (ContextCompat.checkSelfPermission(UploadDocumentActivity.this, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(UploadDocumentActivity.this,new String[]{Manifest.permission.CAMERA},
MY_CAMERA_PERMISSION_CODE);
} else {
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File pictureDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
String pictureNm = getPictureName();
imageFile = new File(pictureDirectory , pictureNm);
Uri pictureUri = Uri.fromFile(imageFile);
System.out.println("URI"+pictureUri);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,pictureUri);
cameraIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,1);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
}
}
这是 onActivityResult:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//super.onActivityResult(requestCode, resultCode, data);
Bitmap myBitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath());
mImgDocument.setImageBitmap(myBitmap);
}
我尝试压缩位图时出现错误:
try {
os = new FileOutputStream(imageFile.getAbsolutePath());
photo.compress(Bitmap.CompressFormat.JPEG, 100, os);
os.flush();
os.close();
} catch (Exception e) {
Log.e(getClass().getSimpleName(), "Error writing bitmap", e);
}
partList.add(new FilePart("file", imageFile));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
我正在尝试像这样将图像发送到服务器,但我找不到我的代码出了什么问题。我想发送这个图像文件,但是当我看到我的日志时,它显示如下内容:
I/System.out: partList:[file]
我想以正确的方式发送图片 only.Is
Bitmap.compress 出了什么问题??
在 onActivityResult() 中使用该文件而不是 'myBitmap' 存储到 'photo' 变量中。此处该文件可能存在也可能不存在,所以在抓图成功完成后执行此操作。
if (requestCode==CAMERA_REQUEST && resultCode==RESULT_OK){
//load bitmap
}
您的 photo
变量未初始化。您需要在使用该变量之前对其进行初始化。
替换
Bitmap myBitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath()); // You never use myBitmap after creating and initializing it...
mImgDocument.setImageBitmap(myBitmap);
和
if (requestCode==CAMERA_REQUEST && resultCode==RESULT_OK){ // <- this ensures the user didn't cancel the Camera Intent
photo= BitmapFactory.decodeFile(imageFile.getAbsolutePath()); // <- this initializes the variable so you can use it later.
mImgDocument.setImageBitmap(photo);
}
这是我的例外:
E/UploadBill: Error writing bitmap
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' on a null object reference
at kmsg.com.onetouch.activity.UploadDocumentActivity$UploadBill.doInBackground(UploadDocumentActivity.java:299)
at kmsg.com.onetouch.activity.UploadDocumentActivity$UploadBill.doInBackground(UploadDocumentActivity.java:279)
这是我的代码:
File imageFile;
Bitmap photo;
这是我点击的按钮:
public void getFile(View view) {
if (ContextCompat.checkSelfPermission(UploadDocumentActivity.this, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(UploadDocumentActivity.this,new String[]{Manifest.permission.CAMERA},
MY_CAMERA_PERMISSION_CODE);
} else {
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File pictureDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
String pictureNm = getPictureName();
imageFile = new File(pictureDirectory , pictureNm);
Uri pictureUri = Uri.fromFile(imageFile);
System.out.println("URI"+pictureUri);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,pictureUri);
cameraIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,1);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
}
}
这是 onActivityResult:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//super.onActivityResult(requestCode, resultCode, data);
Bitmap myBitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath());
mImgDocument.setImageBitmap(myBitmap);
}
我尝试压缩位图时出现错误:
try {
os = new FileOutputStream(imageFile.getAbsolutePath());
photo.compress(Bitmap.CompressFormat.JPEG, 100, os);
os.flush();
os.close();
} catch (Exception e) {
Log.e(getClass().getSimpleName(), "Error writing bitmap", e);
}
partList.add(new FilePart("file", imageFile));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
我正在尝试像这样将图像发送到服务器,但我找不到我的代码出了什么问题。我想发送这个图像文件,但是当我看到我的日志时,它显示如下内容:
I/System.out: partList:[file]
我想以正确的方式发送图片 only.Is Bitmap.compress 出了什么问题??
在 onActivityResult() 中使用该文件而不是 'myBitmap' 存储到 'photo' 变量中。此处该文件可能存在也可能不存在,所以在抓图成功完成后执行此操作。
if (requestCode==CAMERA_REQUEST && resultCode==RESULT_OK){
//load bitmap
}
您的 photo
变量未初始化。您需要在使用该变量之前对其进行初始化。
替换
Bitmap myBitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath()); // You never use myBitmap after creating and initializing it...
mImgDocument.setImageBitmap(myBitmap);
和
if (requestCode==CAMERA_REQUEST && resultCode==RESULT_OK){ // <- this ensures the user didn't cancel the Camera Intent
photo= BitmapFactory.decodeFile(imageFile.getAbsolutePath()); // <- this initializes the variable so you can use it later.
mImgDocument.setImageBitmap(photo);
}