Проблема в получении значений из Json ответа - PullRequest
0 голосов
/ 27 апреля 2020

Я нажимаю на URL с четырьмя параметрами. Если параметры не совпадают, я получу следующий ответ

Это мой Json ответ

{
 "result": "0"
}

Теперь мой вопрос. Как я могу получить это значение результата от ответа. ?

Вот мой экземпляр Retrofit

 public class RetrofitClientInstance {
 private static Retrofit retrofit;
 private static final String BASE_URL = "https://URL/";

 public static Retrofit getRetrofitInstance() {
    if (retrofit == null) {
        retrofit = new retrofit2.Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    return retrofit;
     }
 }

Интерфейс Retrofit

public interface ApiInterface {

    @GET("f/f/ff.php")
    Call<Object> verifyUser (@QueryMap Map< String, String > params );

}

Код для получения ответа

 ApiInterface apiInterface = RetrofitClientInstance.getRetrofitInstance().create(ApiInterface.class);

        Call<Object> call = apiInterface.verifyUser(params);

        call.enqueue(new Callback<Object>() {
            @Override
            public void onResponse(Call<Object> call, Response<Object> response) {

                Log.e("Code ", response.code() + "");
                if (!response.isSuccessful()) {
                    Log.e("Code ", response.code() + "");
                    return;
                }

                // Convert String to json object
                JSONObject json = null;
                String str_value = null;
                try {
                    json = new JSONObject(String.valueOf(response));
                    //JSONObject json_LL = json.getJSONObject("result");


                    // get value from LL Json Object
                    str_value = json.getString("result"); //<< get value here


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

               // Log.e("Response ", json.length() + "");
                Toast.makeText(RegistrationForm.this, str_value, Toast.LENGTH_SHORT).show();
                Object responseBody = response.body();


            }

            @Override
            public void onFailure(Call<Object> call, Throwable t) {

                Log.e("Failed", t.getMessage() + "");
            }
        });

1 Ответ

1 голос
/ 27 апреля 2020

Так как вы используете Gson. Вы можете заменить Object классом, содержащим поля, которые вы хотите проанализировать.

, например:

public class ResultResponse {
    String result;

    public String getResult() {
        return result;
    }

    public void setResult(String result) {
        this.result = result;
    }
}

И изменить метод конечной точки, чтобы он возвращал этот класс.

public interface ApiInterface {

    @GET("f/f/ff.php")
    Call< ResultResponse> verifyUser (@QueryMap Map< String, String > params );

}

Также не забудьте изменить оставшийся код для использования нового типа возврата ResultResponse

  Call<ResultResponse> call = apiInterface.verifyUser(params);

        call.enqueue(new Callback<ResultResponse>() {
            @Override
            public void onResponse(Call<ResultResponse> call, Response<ResultResponse> response) {

                Log.e("Code ", response.code() + "");
                if (!response.isSuccessful()) {
                    Log.e("Code ", response.code() + "");
                    return;
                }
                ResultResponse resultResponse = response.body();
                String str_value = resultResponse.getResult();
                Toast.makeText(RegistrationForm.this, str_value, Toast.LENGTH_SHORT).show();  
            }

            @Override
            public void onFailure(Call<Object> call, Throwable t) {
                Log.e("Failed", t.getMessage() + "");
            }
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...