Модификация получения org. json .JSONException: конец ввода в символе 0 из - PullRequest
0 голосов
/ 27 января 2020

Я создаю android приложение и мне нужно вызвать API с сервера для проверки статуса. Но я получаю org.json.JSONException: End of input at character 0 of. Я не могу понять, что не так. Но если я использую volley вместо retrofit, это работает. если я использую retrofit, я получаю эту ошибку.

Активность

ApiInterface apiService =
            ApiClient.getClient().create(ApiInterface.class);
    HashMap<String, String> params = new HashMap<>();
    params.put("rt", "fcf9e4cb63f014c309f3160d5d8b1b13");
    Call<ResponseBody> mService = apiService.getData(params);
    mService.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> API) {


            if (API.isSuccessful()) {

                try {
                    String data = API.body().string();
                    JSONObject object = new JSONObject(data);
                    status = object.getString("status");
                    Log.d("athira status:",status);
                    JSONArray array = object.getJSONArray("position");
                    for (int i = 0; i < array.length(); i++) {
                        val.add(array.getString(i));
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            new Handler(Looper.getMainLooper()).post(new Runnable() {
                @Override
                public void run() {
                    adapter.notifyDataSetChanged();
                    rv.setAdapter(new RecyclerPredictionAdapter(gridViewArray, status, val, new RecyclerPredictionAdapter.OnItemClickListener() {
                        @Override
                        public void onItemClick(int position) {
                            GridViewClick(position);
                        }
                    }));
                }
            });
        }
        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
        }
    });

API

  @POST(".")
  Call<ResponseBody> getData(@Body HashMap<String, String> user);

Ошибка

 org.json.JSONException: End of input at character 0 of 
 2020-01-27 12:18:40.050 7014-7014/com.clickastro.dailyhoroscope W/System.err:     at 
 org.json.JSONTokener.syntaxError(JSONTokener.java:449)
 2020-01-27 12:18:40.050 7014-7014/com.clickastro.dailyhoroscope W/System.err:     at 
 org.json.JSONTokener.nextValue(JSONTokener.java:97)
 2020-01-27 12:18:40.050 7014-7014/com.clickastro.dailyhoroscope W/System.err:     at 
 org.json.JSONObject.<init>(JSONObject.java:159)
 2020-01-27 12:18:40.050 7014-7014/com.clickastro.dailyhoroscope W/System.err:     at 
 org.json.JSONObject.<init>(JSONObject.java:176)
 2020-01-27 12:18:40.050 7014-7014/com.clickastro.dailyhoroscope W/System.err:     at 
 com.clickastro.dailyhoroscope.fragments.PredictionFragment$2.onResponse(PredictionFragment.java:265)
 2020-01-27 12:18:40.050 7014-7014/com.clickastro.dailyhoroscope W/System.err:     at 
 retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run
(ExecutorCallAdapterFactory.java:70)
2020-01-27 12:18:40.050 7014-7014/com.clickastro.dailyhoroscope W/System.err:     at 
android.os.Handler.handleCallback(Handler.java:873)
2020-01-27 12:18:40.050 7014-7014/com.clickastro.dailyhoroscope W/System.err:     at 
android.os.Handler.dispatchMessage(Handler.java:99)

Результат

{
"status": "ON",
"position": [
    "4"
]
}

1 Ответ

0 голосов
/ 27 января 2020

Вам нужно использовать

implementation "com.squareup.retrofit2:converter-gson:$retrofit2_version"

И создать объект

public class Example {

@SerializedName("status")
@Expose
private String status;
@SerializedName("position")
@Expose
private List<String> position = null;

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}

public List<String> getPosition() {
return position;
}

public void setPosition(List<String> position) {
this.position = position;
}
}

И использовать это

Call<Example> getData(@Body HashMap<String, String> user);
...