在经历了大量的内存分配错误解决方案之后,我暗示并尝试了很多这些用于我的应用程序,但我不知道为什么它仍然会给内存崩溃。它只发生在相机文件夹图像而不是其他人如果在某处出错,请帮我纠正我的代码。 首先是使用图像意图选择图像后的活动结果:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
Uri filePath = data.getData();
try {
//getting image from gallery
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
//Setting image to ImageView
ivImage.setImageBitmap(bitmap);
Uri selectedImageUri = data.getData();
} catch (Exception e) {
e.printStackTrace();
}
}
另一种方法是通过将位图转换为字节数组来将图像上传到服务器的方法:
public void upload()
{
progressDialog = new ProgressDialog(AddPropertyThird.this);
progressDialog.setMessage("Uploading, please wait...");
progressDialog.show();
//converting image to base64 string
ByteArrayOutputStream baos = new ByteArrayOutputStream();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inPreferredConfig = Bitmap.Config.RGB_565;
options.inDither = true;
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] imageBytes = stream.toByteArray();
bitmap.recycle();
final String imageString = Base64.encodeToString(imageBytes, Base64.DEFAULT);
//sending image to server
StringRequest request = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
progressDialog.dismiss();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.e("volleyerror", "" + volleyError);
}
}) {
//adding parameters to send
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("ImgStr", imageString);
return parameters;
}
};
RequestQueue rQueue = Volley.newRequestQueue(AddPropertyThird.this);
rQueue.add(request);
}
这是我的logcat错误:
E/dalvikvm-heap: Out of memory on a 4192272-byte allocation.
Out of memory on a 4186240-byte allocation.
Out of memory on a 2089032-byte allocation.
FATAL EXCEPTION: main
java.lang.OutOfMemoryError
java.io.ByteArrayOutputStream.toByteArray(ByteArrayOutputStream.java:122)
答案 0 :(得分:0)
关于如何在避免内存不足错误的同时加载图像的第一个错误check out this question。
您在使用ByteArray时出现Out of Memory错误,因为您正在将该图像从该行中的流中拉入内存
byte[] imageBytes = stream.toByteArray();
所以相反,你会想避免这样做。 Check out this answer