2017-02-03 8 views
0

Я пытаюсь получить это в своем классе, но я получил сообщение об ошибке Ожидаемый BEGIN_OBJECT, но был STRING в строке 1 столбец 1 путь $ Мой ответ от веб-службы {{last_question}: "0", "уровень": "0", "ошибка": "0"} спасибоКак восстановить объект json с помощью retrofit 2

Json

{"last_question":"0","level":"0","error":"0"} 

Activtiy

//calling from MainActivity 
     private void get() 
      { 
       Gson gson = new GsonBuilder() 
         .setLenient() 
         .create(); 

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

       API mApi = retrofit.create(API.class); 

       Call<Example> call = mApi.getdata(); 
       call.enqueue(new Callback<Example>() 
       { 
        @Override 
        public void onResponse(Call<Example> call, Response<Example> response) 
        { 
         System.out.println(response.body().getError()); 

        } 

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

         System.out.println(t.getMessage()); 
        } 
       }); 


      } 

// POJO класс

public class Example { 
    private String last_question; 
    private String level; 
    private String error; 
//all getter andd setter are is here 
} 
+0

** Ожидаемый BEGIN_OBJECT, но был STRING ** Проверьте свой ответ. кажется, является строкой, в то время как ваш код ожидает 'JSONObject'. Ваш код выглядит хорошо – Raghunandan

+0

У меня был тот же json здесь https://api.myjson.com/bins/cw29l для тестирования, и тот же код Android работает, за исключением его запроса на получение и типа содержимого заголовка, чтобы принять приложение/json – Raghunandan

ответ

0

Обновление: Ваш сервер не отвечает желаемым ответом. На самом деле его HTML-код, который возвращается:

<html><body><script type="text/javascript" src="/aes.js" ></script><script>function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f<d.length;f++)e+=(16>d[f]?"0":"")+d[f].toString(16);return e.toLowerCase()}var a=toNumbers("f655ba9d09a112d4968c63579db590b4"),b=toNumbers("98344c2eee86c3994890592585b49f80"),c=toNumbers("9cc75ba79032859c712d6ecb862cfde7");document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/"; location.href="http://advancedcalc.byethost8.com/test.php?i=2";</script><noscript>This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support</noscript></body></html> 

Старых (неправильный) ответ:

Вы забыли добавить @SerializedName(name) Аннотации к вашим полям в примере класса:

@SerializedName("last_question") 
private String last_question; 

@SerializedName("level") 
private String level; 

@SerializedName("error") 
private String error; 
+0

i получил такую ​​же ошибку @dipdipdip – Nikul

+0

, вам не нужно использовать аннотации, когда имена идентичны, только когда вам нужно использовать разные имена –

+0

@Nikul вам нужно проверить ответ с сервера. Кажется, вы в конечном итоге получаете строку, в то время как ваш код ожидает jsonobject. Ваш код для Android выглядит нормально – Raghunandan