首页 > 解决方案 > 如何将 BEGIN_OBJECT 转换为 BEGIN_ARRAY

问题描述

我是java的初学者,我需要一些帮助,我看过很多关于它们的帖子,但没有工作他们的问题

我有来自url的json对象

{
    'history':[{
            'id':2,
             'name':'irine'},
          {
            'id':3,
             'name':'karine'
             }]
}

但是我需要

[
           {
           'id':2,
             'name':'irine'},
          {
            'id':3,
             'name':'karine'}
]

我的 ApiClient.java

公共类 ApiClient {

public static final String BASE_URL = "http://192.168.150.100";
public static Retrofit retrofit;


public static Retrofit getApiClient(final String authToken){

    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient httpClient = new OkHttpClient.Builder()
            .addInterceptor(new Interceptor() {
                @Override
                public Response intercept(Chain chain) throws IOException {
                    Request.Builder ongoing = chain.request().newBuilder();
                    ongoing.addHeader("Accept", "application/json;");
                    ongoing.addHeader("Authorization", authToken);

                        return chain.proceed(ongoing.build());
                }
            })//.addInterceptor(interceptor)
            .build();
    if (retrofit==null){
        retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .client(httpClient)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    return retrofit;
}

}

从 url 获取响应

call.enqueue(new Callback<List<Contact>>() {
            @Override
            public void onResponse(Call<List<Contact>> call, Response<List<Contact>> response) {
                progressBar.setVisibility(View.GONE);

                contacts=response.body();

                if(contacts==null)
                    Snackbar.make(findViewById(R.id.lt_search), "Nothing found",Snackbar.LENGTH_LONG).show();
                adapter = new Adapter(contacts, SearchActivity.this);
               recyclerView.setAdapter(adapter);
               adapter.notifyDataSetChanged();
            }

            @Override
            public void onFailure(Call<List<Contact>> call, Throwable t) {
                progressBar.setVisibility(View.GONE);
                Log.d("GHaa ka sk aksjdk j", contacts.toString());
                Toast.makeText(SearchActivity.this, "Error\n"+t.toString(), Toast.LENGTH_LONG).show();
            }
        });

如何将对象转换为数组或从对象中清除单词“历史”?

标签: javaandroid

解决方案


您为 API 响应提供了错误的类。您正在获取可能更改的list对象string key(未知)。因此,您将不得不使用HashMap. API 响应的格式为HashMap<String,<List<Contact>>>. 因此,在代码中,您将不得不使用Callback<HashMap<String,List<Contact>>>()而不是Callback<List<Contact>>().

然后从HashMap你可以很容易地得到listusing hashmap.get('key')。在你的情况下,hashmap.get('history').


推荐阅读