Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
E/Volley:[1624]NetworkDispatcher.processRequest:未处理的异常java.lang.IllegalStateException:Can';不要压缩回收的位图_Java_Android_Bitmap_Android Volley - Fatal编程技术网

E/Volley:[1624]NetworkDispatcher.processRequest:未处理的异常java.lang.IllegalStateException:Can';不要压缩回收的位图

E/Volley:[1624]NetworkDispatcher.processRequest:未处理的异常java.lang.IllegalStateException:Can';不要压缩回收的位图,java,android,bitmap,android-volley,Java,Android,Bitmap,Android Volley,我正在制作一个程序,以采取截图,并上传到我的服务器数据库 这是我的代码: private class ImageAvailableListener implements ImageReader.OnImageAvailableListener { @Override public void onImageAvailable(ImageReader reader) { Log.d(TAG, "onImageAvailable&qu

我正在制作一个程序,以采取截图,并上传到我的服务器数据库

这是我的代码:

private class ImageAvailableListener implements ImageReader.OnImageAvailableListener {

        @Override
        public void onImageAvailable(ImageReader reader) {
            Log.d(TAG, "onImageAvailable");

            FileOutputStream fos = null;
            Bitmap bitmap = null;
            String name = null;
            try (Image image = mImageReader.acquireLatestImage()) { // acquire last image
                if (image != null) {
                    Image.Plane[] planes = image.getPlanes();
                    ByteBuffer buffer = planes[0].getBuffer();
                    int pixelStride = planes[0].getPixelStride();
                    int rowStride = planes[0].getRowStride();
                    int rowPadding = rowStride - pixelStride * mWidth;

                    // create bitmap
                    bitmap = Bitmap.createBitmap(mWidth + rowPadding / pixelStride, mHeight, Bitmap.Config.ARGB_8888);
                    bitmap.copyPixelsFromBuffer(buffer);

                    Screenshot screenshot = new Screenshot(bitmap, Integer.toString(IMAGES_PRODUCED));
                    ImageSender.getInstance().uploadImage(screenshot);




                    IMAGES_PRODUCED++;
                    Log.e(TAG, "captured image: " + IMAGES_PRODUCED);
                }

            } catch (Exception e) {
                e.printStackTrace();
            }

                **if (bitmap != null) { // this is the problem
                    bitmap.recycle();
                }**

        }
这是我的截击库代码:

 @NonNull
    private byte[] getFileDataFromDrawable(@NonNull Bitmap bitmap) {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        **bitmap.compress(Bitmap.CompressFormat.PNG, 80, byteArrayOutputStream);** // error
        return byteArrayOutputStream.toByteArray();
    }

    private void uploadBitmap(final Screenshot screenshot) {


        //our custom volley request
        VolleyMultipartRequest volleyMultipartRequest = new VolleyMultipartRequest(Request.Method.POST, Settings.UPLOAD_URL,
                new Response.Listener<NetworkResponse>() {
                    @Override
                    public void onResponse(NetworkResponse response) {
                        try {
                            JSONObject obj = new JSONObject(new String(response.data));
                            Toast.makeText(context.getApplicationContext(), obj.getString("message"), Toast.LENGTH_SHORT).show();
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(context.getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                }) {

            /*
             * If you want to add more parameters with the image
             * you can do it here
             * here we have only one parameter with the image
             * which is tags
             * */
            @NonNull
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<>();
                params.put("tags", "tags");
                return params;
            }

            /*
             * Here we are passing image by renaming it with a unique name
             * */
            @NonNull
            @Override
            protected Map<String, DataPart> getByteData() {
                Map<String, DataPart> params = new HashMap<>();
//                long imagename = System.currentTimeMillis();
                params.put("pic", new DataPart(screenshot.getName() + ".png", getFileDataFromDrawable(screenshot.getBitmap())));
                return params;
            }
        };

        //adding the request to volley
        Volley.newRequestQueue(context).add(volleyMultipartRequest);
    }
它可以正常工作,但过了很长时间,我的应用程序崩溃了

我如何解决?我使用阻塞队列插入屏幕截图。线程完成后,获取屏幕截图并在函数private void uploadBitmap(最终屏幕截图)处传递它们

谢谢

 //if (bitmap != null) { 
 //       bitmap.recycle();
 //}