【发布时间】:2018-09-03 17:18:44
【问题描述】:
1.当我尝试将我拍摄的图片发送到服务器时,应用程序崩溃了,这表明第 101 行中有一些东西 这就是错误
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.th3hokage.pfev1, PID: 25157
java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.Bitmap android.graphics.drawable.BitmapDrawable.getBitmap()' on a null object reference
at com.example.th3hokage.pfev1.SendPic.ImageUploadToServerFunction(SendPic.java:155)
at com.example.th3hokage.pfev1.SendPic$2.onClick(SendPic.java:101)
at android.view.View.performClick(View.java:6199)
at android.widget.TextView.performClick(TextView.java:11090)
at android.view.View$PerformClick.run(View.java:23647)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
2. Send to server 方法的代码和我实例化 ImageView 的 Activity 的顶部,这几乎是整个代码,除了一些辅助方法
public class SendPic extends Activity {
ImageView imageViewHolder;
EditText imageName;
ProgressDialog progressDialog ;
Intent intent ;
public static final int RequestPermissionCode = 1 ;
Bitmap bitmap;
boolean check = true;
String GetImageNameFromEditText;
String ImageNameFieldOnServer = "image_name" ;
String ImagePathFieldOnServer = "image_path" ;
String ImageUploadPathOnSever ="" ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.send_pic);
Button CaptureImageFromCamera = (Button)findViewById(R.id.button);
imageViewHolder = (ImageView)findViewById(R.id.imageView);
Button UploadImageToServer = (Button) findViewById(R.id.button2);
imageName = (EditText)findViewById(R.id.editText);
EnableRuntimePermissionToAccessCamera();
CaptureImageFromCamera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 7);
}
});
public void ImageUploadToServerFunction() {
ByteArrayOutputStream byteArrayOutputStreamObject ;
byteArrayOutputStreamObject = new ByteArrayOutputStream();
bitmap = ((BitmapDrawable) ImageViewHolder.getDrawable()).getBitmap();
// Converting bitmap image to jpeg format, so by default image will upload in jpeg format.
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
byteArrayOutputStreamObject);
byte[] byteArrayVar = byteArrayOutputStreamObject.toByteArray();
final String ConvertImage = Base64.encodeToString(byteArrayVar,
Base64.DEFAULT);
class AsyncTaskUploadClass extends AsyncTask<Void,Void,String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog at image upload time.
progressDialog = ProgressDialog.show(SendPic.this,"Image is Uploading","Please Wait",false,false);
}
@Override
protected void onPostExecute(String string1) {
super.onPostExecute(string1);
// Dismiss the progress dialog after done uploading.
progressDialog.dismiss();
// Printing uploading success message coming from server on android app.
Toast.makeText(SendPic.this,string1,Toast.LENGTH_LONG).show();
// Setting image as transparent after done uploading.
ImageViewHolder.setImageResource(android.R.color.transparent);
}
@Override
protected String doInBackground(Void... params) {
ImageProcessClass imageProcessClass = new ImageProcessClass();
HashMap<String,String> HashMapParams = new HashMap<String,String>();
HashMapParams.put(ImageNameFieldOnServer, GetImageNameFromEditText);
HashMapParams.put(ImagePathFieldOnServer, ConvertImage);
String FinalData = imageProcessClass.ImageHttpRequest(ImageUploadPathOnSever, HashMapParams);
return FinalData;
}
}
AsyncTaskUploadClass AsyncTaskUploadClassOBJ = new AsyncTaskUploadClass();
}
【问题讨论】:
-
请分享发送到服务器的代码或函数。发送前也要先检查Bitmap的实例是否不为null
-
空指针异常仅表示您正在尝试使用尚未初始化或设置为空的对象或实例。请确保位图实例是否已正确实例化并且不是 NULL。仍然会建议您分享相关代码以更好地解决您的问题。
-
@Kishan 我刚刚添加了方法的代码