Есть ли способ использовать `JSONObject` вместо` JsonObject` для чтения данных JSON из дооснащения - PullRequest
0 голосов
/ 02 мая 2018

Я передаю некоторые параметры сервису, и он возвращает мне json object.

Я сделал следующее, чтобы добиться этого.

@POST("testservice")
@FormUrlEncoded
Call<JsonObject> getRegisterUserData(
        @Header("x-dsn") String dsn,
        @Field("id") String id
);

На занятии я сделал следующее.

    Retrofit retrofit= new Retrofit.Builder()
            .baseUrl(API.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

call.enqueue(new Callback<JsonObject>() {
    @Override
    public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
        parseResponse(response);
    }

Это работает нормально, но проблема в том, что если я использую JSONObject вместо com.google.JsonObject, тогда я не могу получить фактический ответ jsonObject с сервера и возвращает строку {}.

Я хочу использовать JSONObject здесь, возможно ли использовать JSONObject с модернизацией.

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Если вы хотите выполнить синтаксический анализ вручную, используя Retrofit , вы можете сделать это, передав класс oKhttp ResponseBody вместо класса вашей модели в интерфейсе, как показано ниже

@POST("testservice")
@FormUrlEncoded
Call<ResponseBody> getRegisterUserData(
        @Header("x-dsn") String dsn,
        @Field("id") String id
);

В своем ответе на вызов дооснащения получите его response.body().string() в JSONObject объекте класса следующим образом -

 call.enqueue(new Callback<ResponseBody>() {
    @Override
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
        try {
                                Log.d("test", response.body().string());
                                JSONObject jsonObject = new JSONObject(response.body().string());
                            } catch (IOException e) {
                                e.printStackTrace();
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
    }

response.body().string() возвращает строку ответа json .

Спасибо, надеюсь, это сработает для вас.

0 голосов
/ 02 мая 2018

Почему бы вам не создать класс модели вашего json и создать объект этого класса из ответа, как показано ниже:

call.enqueue(new Callback<YourClass>() {
@Override
public void onResponse(Call<YourClass> call, Response<YourClass> response) {
    YourClass yourObject = new YourClass();
    yourObject = response.body()
}

и создайте файл YourClass.java как:

public class YourClass
{
    @SerializedName("jsonAttributeName")
    @Expose
    private int/String/boolean yourAttribute;

    // Create getter/setters
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...