Как получить изображение из ответа JSON из API с помощью модернизации - PullRequest
0 голосов
/ 06 декабря 2018

Я получаю ответ в формате JSON, в котором отображается путь к моему изображению, но я не могу просто напрямую загрузить изображение с его пути, используя модификацию.

Вот пример вывода JSON:

{
"Emp_Photo": "/Images/2018_07_02_05_30_24.jpg",
}

Я попытался извлечь и сохранить значение Emp_Photo в строку и загрузил строку в просмотр изображений с помощью Picasso, но это не работает.

Вот некоторая часть моего кода, которую я пытаюсь выполнить:

final ProgressDialog progressDialog = new ProgressDialog(getActivity());
        progressDialog.setMessage("Fetching Data...");
        progressDialog.show();
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(ApiClient.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        Fetchemployeedetailsinterface service = retrofit.create(Fetchemployeedetailsinterface.class);

//Result is our pojo class
        SharedPreferences settings = getActivity().getSharedPreferences("PREFS_NAME", 0);
       String emailtoken= settings.getString("email", "").toString();
        Call<ResponseData> call = service.Bind_Employee_Details_Based_On_Id(emailtoken);
        call.enqueue(new Callback<ResponseData>() {
            @Override
            public void onResponse(Call<ResponseData> call, Response<ResponseData> response) {
                //.getMessage is POJO method to listen for final json output
                List<MessageItem> listResponse =response.body().getMessage();
                String fname=listResponse.get(0).getEmpFirstName();
                String lname=listResponse.get(0).getEmpLastName();
                String email=listResponse.get(0).getEmpEmail();
                String address=listResponse.get(0).getEmpAddress();
                String joindt=listResponse.get(0).getJoiningDate();
                String imgaddress=listResponse.get(0).getEmpPhoto();

                Picasso.with(getActivity()).load(imgaddress).into(pick);
                ettvname.setText(fname+"-"+lname);
                etfname.setText(fname);
                etlname.setText(lname);
               etemail.setText(email);
               etaddress.setText(address);
               etjoindt.setText(joindt);
                progressDialog.dismiss();
            }

            @Override
            public void onFailure(Call<ResponseData> call, Throwable t) {
                progressDialog.dismiss();
                Toast.makeText(getActivity(), t.getMessage(), Toast.LENGTH_LONG).show();
            }
        });

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Как вы упомянули в своем описании, вы получаете единственный путь к изображению.Но вы не получаете полный путь вашего изображения.Таким образом, вам нужно будет заполнить путь вашего изображения, откуда вы можете легко получить изображение и загрузить его.Для этого вы должны следовать приведенному ниже методу:

String image = base_URL + imgaddress;  //Here base URL means initial path of your image or server.
Picasso.with(getActivity()).load(imgaddress).into(pick);

Попробуйте получить base_URL в ответ или другим способом.

0 голосов
/ 06 декабря 2018

Ваш Emp_Photo - это просто путь к изображению.Вы должны преобразовать его в полный URL-адрес, а затем загрузить его с помощью Picasso.

String imageUrl = YOUR_ROOT_IMAGE + imgaddress
Picasso.with(getActivity()).load(imageUrl).into(pick);

Другие советы:

И вам следует применить некоторые соглашения, чтобы сделать ваш код легче для чтения.

service.Bind_Employee_Details_Based_On_Id() -> service.bindEmployeeDetailsBasedOnId()
Fetchemployeedetailsinterface -> FetchEmployeeDetailsInterface
...

И здесь:

List<MessageItem> listResponse =response.body().getMessage();
String fname=listResponse.get(0).getEmpFirstName();

Вы должны проверить и убедиться, что в listResponse есть хотя бы 1 элемент, чтобы предотвратить сбой приложения во время выполнения.

...