2017-02-10 38 views
2

经历了很多内存分配错误解决方案之后,我暗示并尝试了很多针对我的应用程序的应用程序,但我不知道它为什么仍然崩溃内存。它只发生在相机文件夹图像不适用于其他人。请帮我纠正我的代码,如果它在某个地方是错误的。 第一个是在活动结果使用图像意图选择图像之后:内存不足在将位图转换为字节数组时,摄像机图像出现错误

@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

http://stackoverflow.com/questions/477572/strange-out-of-memory-issue-while-loading-an-image-to-a-bitmap-object ...希望这会帮助你。 –

+0

[将图像加载到位图对象时出现内存不足的问题]的可能重复(http://stackoverflow.com/questions/477572/strange-out-of-memory-issue-while-loading-an-image-位图对象) –

+0

我已经通过了推荐的链接。它没有解决问题@JaiminThakkar – user1111

回答

0

用于如何同时避免内存不足的错误加载图像的第一个错误check out this question

你得到一个内存不足的错误与ByteArray的,因为你拉的图像到内存从流上线

byte[] imageBytes = stream.toByteArray(); 

所以不是你想避免这样做。 Check out this answer

+0

你能解释一下吗?实际上在他们使用multipart进行图片上传的链接中,那不是我的情况。 – user1111

相关问题