如何通过Retrofit获取简单URL的数据,这是JSON但JSON只有ID而没有标签名称?

时间:2018-01-11 17:43:15

标签: android json retrofit2

我写的Retrofit代码如下,请告诉我我做错了什么。 也有人可以告诉我为什么我们应该在哪种情况下使用RxJava以及它如何比Android支持的Volley更有用?

活动

 mService.getAnswers().enqueue(new Callback<JsonObject>() {
        @Override
        public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {

            if(response.isSuccessful()) {
               // mAdapter.updateAnswers(response.body().getItems());
                Log.d("MainActivity", "posts loaded from API");
            }else {
                int statusCode  = response.code();
                // handle request errors depending on status code
            }
        }

        @Override
        public void onFailure(Call<JsonObject> call, Throwable t) {
           // showErrorMessage();
            Toast.makeText(getApplicationContext(), "Unable to create post" , Toast.LENGTH_LONG).show();
            Log.e("RETROFIT",t.toString());
            Log.d("MainActivity", "error loading from API");

        }
    });

接口

public interface SOService {
   @GET("/topstories.json")
   Call<JsonObject> getAnswers();
}

和Util是

public class ApiUtils {

   public static final String BASE_URL = "https://hacker-news.firebaseio.com/v0/";

   public static SOService getSOService() {
       return RetrofitClient.getClient(BASE_URL).create(SOService.class);
   }
} 

1 个答案:

答案 0 :(得分:1)

首先从SoService中移除JsonObject,然后在每个位置将JsonArray更改为public interface SOService { @GET("topstories.json") Call<JsonArray> getAnswers(); } ,以便更改代码后如此

接口

mService.getAnswers().enqueue(new Callback<JsonArray>() {
        @Override
        public void onResponse(Call<JsonArray> call, Response<JsonArray> response) {

            if(response.isSuccessful()) {
                // mAdapter.updateAnswers(response.body().getItems());
                Log.d("MainActivity", "posts loaded from API");
            }else {
                int statusCode  = response.code();
                // handle request errors depending on status code
            }
        }

        @Override
        public void onFailure(Call<JsonArray> call, Throwable t) {
            // showErrorMessage();
            Toast.makeText(getApplicationContext(), "Unable to create post" , Toast.LENGTH_LONG).show();
            Log.e("RETROFIT",t.toString());
            Log.d("MainActivity", "error loading from API");

        }
    });

活动

com.google.gson.JsonArray

注意:导入org.json而不是extern int posix_spawn (pid_t *__restrict __pid, const char *__restrict __path, const posix_spawn_file_actions_t *__restrict __file_actions, const posix_spawnattr_t *__restrict __attrp, char *const __argv[__restrict_arr], char *const __envp[__restrict_arr]);