Ошибка при попытке отправить запрос GET - PullRequest
0 голосов
/ 24 декабря 2018

Я получаю следующую ошибку от Retrofit при попытке проанализировать ответ API:

[java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NUMBER at line 1 column 11 path $[0]]

JSON:

 [ 7407718726019,  18738122, 18732587, 18737891, 18729099, 18731581, 18737081, 18731938, 18731885, 187, 18724725, 18747879, 18732512, 18732217, 18746712 ]

Нет ключа для этого списка.Может кто-нибудь, пожалуйста, помогите мне с решением этой проблемы.

Вот мой интерфейс определения API:

public interface RemoteInterface {

    //Method for an api call
    @GET("v0/topstories.json?print=pretty")
    Call<List<Response>> getResponse();
}

Вот как я вызываю и обрабатываю API:

public class MainActivity extends AppCompatActivity {

    private List<Response> responses;
    RemoteInterface remoteInterface;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        remoteInterface = ApiClient.getApiClient().create(RemoteInterface.class);
        Call<List<Response>> newsCall = remoteInterface.getResponse();


        newsCall.enqueue(new Callback<List<Response>>() {
            @Override
            public void onResponse(Call<List<Response>> call, retrofit2.Response<List<Response>> response) {
                Toast.makeText(MainActivity.this, (CharSequence) response.body
                        (), Toast.LENGTH_SHORT).show();
                Log.d("response",response.body().toString());
            }

            @Override
            public void onFailure(Call<List<Response>> call, Throwable t) {
                Toast.makeText(MainActivity.this, "fail", Toast.LENGTH_SHORT).show();
                Log.d("response",t.getMessage());
            }
        });
    }
}

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Эта ошибка означает, что вы пытаетесь получить неверный тип данных, отправленные вами данные json представляют собой массив чисел, и вы пытаетесь получить список объекта ответа.Вместо этого попробуйте получить

Call<List<Integer>> getResponse();

, и если вы получите сообщение об ошибке, похожее на

Невозможно проанализировать примитивный тип

или что-то в этомэти строки, вы можете попробовать использовать Scalars Converter factory с модификацией.Спасибо

0 голосов
/ 24 декабря 2018

Ваш JSON представляет собой список целых чисел, а ваш доход от Retrofit определяется как List<Response>.Класс Response является классом Retrofit, описывающим полный ответ API.Он не должен использоваться внутри вашего определения следующим образом.

Gson ожидает объект, но вместо этого находит целое число и не может его проанализировать.Чтобы разобрать это, вы должны объявить ожидаемый тип возвращаемого значения как `List.

. Это то, что говорит вам сообщение об ошибке - оно ищет объект, потому что это то, что вы определили, но оно находит числопотому что это то, что содержит JSON.

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