从 Json 响应获取值时出现问题

Problem in getting values from Json response

我正在使用四个参数点击 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;
    }
}

改造界面

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() + "");
    }
});

因为您正在使用 Gson。您可以将 Object 替换为包含您要解析的字段的 class。

例如:

public class ResultResponse {
    String result;

    public String getResult() {
        return result;
    }

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

并将您的端点方法更改为 return 此 class。

public interface ApiInterface {

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

}

另外不要忘记更改剩余代码以使用新的 return 类型 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() + "");
    }
});