URL Query Retrofit 2 - PullRequest
       9

URL Query Retrofit 2

0 голосов
/ 07 ноября 2018

Я разрабатываю трекер криптовалюты, и этот базовый URL не будет работать с конкретными данными, которые мне нужны. Я прочитал, что моя ошибка, скорее всего, вызвана неправильным вызовом URL API.

Error

java.lang.NullPointerException: Attempt to invoke interface method 
'java.lang.Object java.util.List.get(int)' on a null object reference

базовый URL

https://rest.coinapi.io/ 

http запрос

GET /v1/symbols?filter_symbol_id={filter_symbol_id}

Мой код

String BASE_URL = "https://rest.coinapi.io/";

@GET("v1/symbols")
Call<List<Coin>> getCoin(@Query("filter_symbol_id") String filter_symbol_id);
}

Код вызова API

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_main);

    final ListView listView = findViewById (R.id.listView);

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

    Api api = retrofit.create (Api.class);

    Call<List<Coin>> call = api.getCoin ("filter_symbol_id");

    call.enqueue (new Callback<List<Coin>> () {
        @Override
        public void onResponse(Call<List<Coin>> call, 
Response<List<Coin>> response) {

            List<Coin> coin = response.body ();

            String[] coinName = new String[10];

            for (int i = 0; i < 10; i++) {


                coinName[i] = coin.get (i).getsymbol_id ();


                listView.setAdapter (
                        new ArrayAdapter<String> (
                                getApplicationContext (),
                                android.R.layout.simple_list_item_1,
                                coinName

                        )
                );

            }
        }


        @Override
        public void onFailure(Call<List<Coin>> call, Throwable t) {
            Toast.makeText (getApplicationContext (), t.getMessage (), 
Toast.LENGTH_SHORT).show ();
        }
        });

    }

}

Coin.java

package com.dev20tx.android.cryptohero;

public class Coin {

private String symbol_id;


public Coin(String symbol_id) {
    this.symbol_id = symbol_id;


}

public String getsymbol_id() {
    return symbol_id;
}
}

Я нашел много полезных сообщений от stackoverflow, которые помогли мне получить другие данные, но это меня смутило. Может ли кто-нибудь указать мне правильное направление?

ПРОБЛЕМА РЕШЕНА: я использовал другой URL "v1 / assets", который исправил исключение NullPointerException, обновил мой код в java-файлах, и он работает. По некоторым причинам символы API v1 / в настоящее время не работают на coinapi.io

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Ошибка должна быть в вашем Coin классе. Поэтому, пожалуйста, напишите Coin.class. Я думаю, что NullPointerException потому что GSON не может сериализовать Coin объекты, возможно, отсутствует @SerializedName(""). Или еще Показать Coin.class код. (Помните, что параметр apikey также отсутствует, поэтому ответ будет 401 Unauthorized, но он не вызовет NullPointerException).

package com.dev20tx.android.cryptohero;

public class Coin {

@SerializedName("symbol_id") //replace with your response field.
private String symbol_id;


public Coin(String symbol_id) {
    this.symbol_id = symbol_id;
}

public String getsymbol_id() {
    return symbol_id;
}
}
0 голосов
/ 07 ноября 2018

Вы пропали без вести api_key

@GET("v1/symbols")
Call<List<Coin>> getCoin(@Query("filter_symbol_id") String filter_symbol_id, @Query("apikey") String apiKey);

Для получения дополнительной информации посетите https://docs.coinapi.io/#authorization

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