Получение ошибки при сохранении байтового массива в HashMap - PullRequest
0 голосов
/ 21 января 2019

В моем приложении я делаю запрос с Retrofit для получения байтового массива. Затем мне нужно сохранить этот байт [] в 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();
            }
        });
    }
}

Поэтому, когда я хочу поместить байт [] в HashMap, я получаю такую ​​ошибку в блоке catch - java.io.IOException: Content-Length (25139) and stream length (0) disagree.Поэтому, когда я удаляю эту строку - imageHashMap.put("Key1", response.body().bytes());, все работает нормально.Так почему я не могу поместить byte [] в HashMap?Да и еще один вопрос тоже.Что было бы хорошо использовать: HashMap или LinkedHashMap?

1 Ответ

0 голосов
/ 21 января 2019

Байт [] (или любой другой массив) не может работать как ключ в HashMap, поскольку массивы не переопределяют равные, поэтому два массива будут считаться равными, только если они ссылаются на один и тот же объект.

Вам нужно будет обернуть свой байт [] в некоторый пользовательский класс, который переопределяет hashCode и equals, и использовать этот пользовательский класс в качестве ключа для вашей HashMap.

...