Retrofit 2 Spinner не смог получить данные

avatar
Belsazer Razer B
8 апреля 2018 в 07:12
547
1
2

Я хочу сделать счетчик, используя retrofit 2, вот мой класс счетчика:

private void initSpinnerMeridian(){
        loading = ProgressDialog.show(mContext, null, "Loading...", true, false);

    mApiInterface.getMeridian().enqueue(new Callback<DataModel>() {
        @Override
        public void onResponse(Call<DataModel> call, Response<DataModel> response) {
            if (response.isSuccessful()) {
                loading.dismiss();
                List<Meridian> dataMeridian = response.body().getMeridian();
                List<String> listSpinner = new ArrayList<String>();
                for (int i = 0; i < dataMeridian.size(); i++){
                    listSpinner.add(dataMeridian.get(i).getNama());
                }

                ArrayAdapter<String> adapter = new ArrayAdapter<String>(mContext,
                        android.R.layout.simple_spinner_item, listSpinner);
                adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spMeridian.setAdapter(adapter);
            } else {
                loading.dismiss();
                Toast.makeText(mContext, "Failed get data from api", Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onFailure(Call<DataModel > call, Throwable t) {
            t.printStackTrace();
            loading.dismiss();
            Toast.makeText(mContext, "Check your internet connection", Toast.LENGTH_SHORT).show();
        }
    });
}

Вот мой класс ApiInterface:

public interface ApiInterface {
@GET("/api/data/meridian")
Call<DataModel> getMeridian();

@GET("/data/proyek")
Call<DataModel> getProyek();

@FormUrlEncoded
@POST("/transaksi")
Call<InputModel> postTransaksi(
        @Field("save") String save,
        @Field("id_meridian") String idMeridian,
        @Field("id_proyek") String idProyek,
        @Field("kegiatan") String kegiatan,
        @Field("nominal") String nominal,
        @Field("id_kategori") String idKategori,
        @Field("tanggal") String tanggal,
        @Field("keterangan") String keterangan,
        @Field("status") Object status,
        @Field("images") ImageView images
);

Но когда я запускаю это на эмуляторе, ничего не происходит, и появляется только всплывающее уведомление с текстом: Failed get data from api. Что мне делать?

Источник

Ответы (1)

avatar
mononz
8 апреля 2018 в 07:24
0

Вам потребуется проанализировать неуспешный ответ об ошибке от API. API может возвращать причину (например, неавторизованный, маршрут не существует и т. д. и т. д.).

Я бы посоветовал прочитать и реализовать что-нибудь отсюда https://futurestud.io/tutorials/retrofit-2-simple-error-handling

Этот пост также может быть полезен: https://coderhelper.com/a/38243723/6407116

Попробуйте ниже и посмотрите журнал

...
} else {
    loading.dismiss();
    Toast.makeText(mContext, "Failed get data from api", Toast.LENGTH_SHORT).show();
    Log.d("Error " + response.errorBody().string());
}

дополнительные примечания:

Я не уверен, как устроен ваш okhttpclient, но вы можете добавить HttpLoggingInterceptor, как показано ниже, чтобы лучше понять все, что происходит с вашими запросами.

OkHttpClient providesOkHttpClient() {
    OkHttpClient.Builder builder = new OkHttpClient().newBuilder()
            .readTimeout(30, TimeUnit.SECONDS)
            .connectTimeout(30, TimeUnit.SECONDS)
            .writeTimeout(30, TimeUnit.SECONDS);

    if (BuildConfig.DEBUG) {
        // Add a logging interceptor for debug builds only
        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        builder.addInterceptor(loggingInterceptor);
    }
    return builder.build();
}
Belsazer Razer B
8 апреля 2018 в 08:16
0

Спасибо! Теперь, когда я запускаю это на эмуляторе, появляется тост с текстом: значение html типа java.lang.string не может быть преобразовано в jsonobject. Как я могу это исправить?

Belsazer Razer B
8 апреля 2018 в 08:16
0

извините за мой плохой английский

mononz
8 апреля 2018 в 08:35
0

добавил фрагмент кода для ответа. попробуйте это и проверьте журнал

Belsazer Razer B
8 апреля 2018 в 10:53
0

я получил ошибку "необработанное исключение java.io.ioexception"

mononz
8 апреля 2018 в 12:03
0

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