Java Android BitmapFactory在Base64解码字节数组上经常返回null

Java Android BitmapFactory在Base64解码字节数组上经常返回null,java,android,image,sockets,base64,Java,Android,Image,Sockets,Base64,我的电脑上有一个Java服务器,使用臭名昭著的Robot类捕获屏幕截图,将其编码为Base64字符串,然后使用PrintWriter通过套接字将其发送到Android客户端 Android客户端读取Base64编码的字符串,将其转换回字节数组,然后转换为位图图像,以便在ImageView中显示 问题是,虽然这有时会按预期工作,但BitmapFactory.decodeByteArray方法通常会返回null,因此不会向ImageView呈现任何内容。 在LogcatD/skia中给我留言﹕ --

我的电脑上有一个Java服务器,使用臭名昭著的Robot类捕获屏幕截图,将其编码为Base64字符串,然后使用PrintWriter通过套接字将其发送到Android客户端

Android客户端读取Base64编码的字符串,将其转换回字节数组,然后转换为位图图像,以便在ImageView中显示

问题是,虽然这有时会按预期工作,但BitmapFactory.decodeByteArray方法通常会返回null,因此不会向ImageView呈现任何内容。
在Logcat
D/skia中给我留言﹕ --- 解码器->解码返回错误

我可以通过改变电脑上显示的内容来复制成功/失败的解码,可以简单地突出显示屏幕上的一行文本,这将导致解码开始失败,取消突出显示将返回成功

当解码失败时,我尝试将其与服务器发送的字符串进行比较(始终100%相同),并使用外部工具验证Base64编码,该工具始终显示完美的图像

这在运行安卓4.1的真实设备和安卓5.1上的模拟设备上都会发生

到目前为止,我已经花了2天的时间仔细研究了so和互联网,寻找答案,但没有找到任何符合我情况的答案

为什么BitmapFactory方法会经常失败? 还是我在我的客户代码中塞得太多了

Android客户端代码

public class MainActivity extends Activity {

    private Socket socket;
    private static final int SERVERPORT = 6666;
    private static final String SERVER_IP = "192.168.2.5";
    private ImageView imgContainer;
    private Bitmap bitmapObj;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imgContainer = (ImageView) findViewById(R.id.imgContainer);
        new Thread(new ConnectionThread()).start();
    }

    private class ConnectionThread implements Runnable {

        @Override
        public void run() {

            try {
                InetAddress serverAddr = InetAddress.getByName(SERVER_IP);

                socket = new Socket(serverAddr, SERVERPORT);
                BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                // first line is garbage
                String inStr=in.readLine();
                //image receiver loop
                while((inStr = in.readLine()) != null){
                    // log shows string is always same length as the one sent
                    Log.d("IMGTHREAD", String.valueOf(inStr.length()));

                    byte[] img64 = Base64.decode(inStr, Base64.DEFAULT);

                    //Fails here, bitmapfactory decode often returns null? but not always
                     bitmapObj = BitmapFactory.decodeByteArray(img64, 0, img64.length);

                        // update the imgContainer ImageView
                        MainActivity.this.runOnUiThread(new Runnable() {
                            @Override
                            public void run() {

                                imgContainer.setImageBitmap(bitmapObj);
                            }
                        });

                }

            } catch (UnknownHostException e1) {
                e1.printStackTrace();
            } catch (IOException e1) {
                e1.printStackTrace();
            }

        }

    }
}

“decodeByteArray方法将返回false”。Null您的意思是:“为什么BitmapFactory方法会经常失败?”。内存不足。@greenapps-是,空,已修复问题,谢谢。内存使用量相当小,图像本身只有200x200,如果屏幕是解码器似乎随意喜欢的东西,它将继续成功解码,直到我更改显示内容。