2

I want make a spinner using retrofit 2, here is my spinner class:

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();
        }
    });
}

Here is my ApiInterface class:

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
);

}

But, when I'm running this on an emulator, then nothing happens and only a toast with the text: Failed get data from api does appear. What should I do?

phrogg
  • 888
  • 1
  • 13
  • 28

1 Answers1

0

You'll need to parse the non successful error response from the API. The api might be returning a reason why (i.e. unauthorised, route does not exists etc etc).

I'd suggest reading through and implementing something from here https://futurestud.io/tutorials/retrofit-2-simple-error-handling

This post may also be helpful: https://stackoverflow.com/a/38243723/6407116

Try below and look at the log

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

extra notes:

I'm not sure how your okhttpclient is built but you can add a HttpLoggingInterceptor like below to get a better understanding of everything going on with your requests.

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();
}
mononz
  • 1,665
  • 1
  • 12
  • 17
  • Thankyou! Now, when I'm running this on an emulator, a toast with the text: value html of type java.lang.string cannot be converted to jsonobject does appear. How can i fix this? – Belsazer Razer B Apr 08 '18 at 08:16
  • sorry for my bad eng – Belsazer Razer B Apr 08 '18 at 08:16
  • added a code snippet to answer. try that and check out the log – mononz Apr 08 '18 at 08:35
  • i got error "unhandled exception java.io.ioexception" – Belsazer Razer B Apr 08 '18 at 10:53
  • I've added some extra notes to my answer for adding a logging interceptor to your okhttp builder. There will be extra logs in your console so you should be able to see what is being sent and received from your network requests. Might be easier than trying to pass an unknown response – mononz Apr 08 '18 at 12:03