java - 如何将 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();
}
});
如何将对象转换为数组或从对象中清除单词“历史”?
解决方案
您为 API 响应提供了错误的类。您正在获取可能更改的list
对象string key
(未知)。因此,您将不得不使用HashMap
. API 响应的格式为HashMap<String,<List<Contact>>>
. 因此,在代码中,您将不得不使用Callback<HashMap<String,List<Contact>>>()
而不是Callback<List<Contact>>()
.
然后从HashMap
你可以很容易地得到list
using hashmap.get('key')
。在你的情况下,hashmap.get('history')
.
推荐阅读
- javascript - 从法国文化中的 kendo-ui 解析日期
- javascript - 将附件和一些附加参数上传到 MVC 控制器
- javascript - 在移动 Web 浏览器中使用 Facebook JavaScript SDK 的 FB.login 会打开新选项卡而不是原生 Facebook 应用程序
- mysql - 求和时间值 MySQL
- android - EndlessRecyclerViewScrollListener 不显示 recyclerview 上的所有项目
- javascript - free-jqgrid 在子网格中填充下拉菜单
- javascript - 将google分析跟踪代码限制为一个js
- oauth - 应该如何为使用 OAuth 的 API 生态系统定义范围?
- javascript - 为什么在 foreach 函数中未定义变量?
- javascript - 添加自定义工具栏按钮后react-quill缺少样式