在HashMap中保存字节数组时遇到错误-Android

时间:2019-01-21 17:59:43

标签: android arrays hashmap retrofit android-glide

在我的应用程序中,我正在与Retrofit一起请求获取字节数组。然后,我需要将此byte []保存在HashMap中,并在使用Glide加载后。好的,这是我的代码。

public class SimpleClass extends AppCompatActivity {

private Activity activity = SimpleClass.this;
private ImageView imageView;
private HashMap<String, byte[]> imageHashMap;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getImageBytes("Image1");
}

public void getImageBytes(final String imageName) {
    Call<ResponseBody> getChatImage = retrofitClient.getImagesBytes(imageName);
    getChatImage.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            if (response.isSuccessful()) {
                try {
                    imageHashMap.put("Key1", response.body().bytes());
                    Glide.with(activity).load(response.body().bytes()).fitCenter().into(imageView);

                } catch (Exception e) {
                    Toast.makeText(activity, "Error cought in catch block:  " + e.toString(), Toast.LENGTH_SHORT).show();
                    e.printStackTrace();
                }

            } else {
                Toast.makeText(activity, "Response is not successful: " + response.errorBody(), Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            Toast.makeText(activity, "An error occurred", Toast.LENGTH_SHORT).show();
        }
    });
}

}

因此,当我要将byte []放入HashMap时,在catch块-java.io.IOException: Content-Length (25139) and stream length (0) disagree中会收到类似的错误。因此,当我删除此行-imageHashMap.put("Key1", response.body().bytes());时,一切正常。那么,为什么不能在HashMap中放置byte []呢?是的,还有一个问题。有什么好用的:HashMap或LinkedHashMap?谢谢。

1 个答案:

答案 0 :(得分:0)

byte [](或任何数组)不能作为HashMap中的键正常工作,因为数组不会覆盖等于,因此,只有两个数组引用相同的对象时,它们才被视为相等。

您必须将byte []包装在一些覆盖hashCode和equals的自定义类中,并将该自定义类用作HashMap的键。