Android 第2步,获取数组,但在recyclerview中解析为对象
我是第二代改型新手,尝试用数组解析URL,但它尝试将其解析为对象,所以我得到了这条消息。我真的不知道问题到底出在哪里Android 第2步,获取数组,但在recyclerview中解析为对象,android,android-recyclerview,retrofit2,Android,Android Recyclerview,Retrofit2,我是第二代改型新手,尝试用数组解析URL,但它尝试将其解析为对象,所以我得到了这条消息。我真的不知道问题到底出在哪里 java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $ 我一直在学习这个教程 这是我的活动 public class WordActivity extends AppCompatActivity { private ListView
java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
我一直在学习这个教程
这是我的活动
public class WordActivity extends AppCompatActivity {
private ListView listView;
private TextView textView;
private RecyclerView recyclerView;
private ArrayList<WordRepo> data;
private WordRecyclerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.word_info_layout);
Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(myToolbar);
getSupportActionBar().setTitle("");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
myToolbar.setTitle(Html.fromHtml("<font color='#272d85'>Svenska slangord </font>"));
//textView = (TextView) findViewById(R.id.textView);
//listView = (ListView) findViewById(R.id.listView);
Bundle bundle = this.getIntent().getExtras();
if (bundle != null) {
if (bundle.containsKey("posID")) {
int posid = bundle.getInt("posID");
getRetro(posid + 1);
}
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
}
public void getRetro(int categoryID) {
WordInterface client = ApiClient.getClient().create(WordInterface.class);
Call<JSONResponse> call = client.getJSON(categoryID);
call.enqueue(new Callback<JSONResponse>() {
@Override
public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) {
recyclerView = (RecyclerView) findViewById(R.id.recycler_view_words);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(layoutManager);
JSONResponse jsonResponse = response.body();
data = new ArrayList<>(Arrays.asList(jsonResponse.getList()));
adapter = new WordRecyclerAdapter(data);
recyclerView.setAdapter(adapter);
}
@Override
public void onFailure(Call<JSONResponse> call, Throwable t) {
Toast.makeText(WordActivity.this, "error" + t, Toast.LENGTH_LONG).show();
}
});
}
JSONResponse类
public class JSONResponse {
private WordRepo[] words;
public WordRepo[] getList() {
return words;
}
您只需要将响应设置为您自己的对象的ArrayList。 我强烈建议您定义类以获取数据 就我而言
@Override
public void onResponse(Call<ResponseRidingLogs> call, Response<ResponseRidingLogs> response) {
if(response.body().header.result_code != 0) {
// Error handling
} else {
ResponseRidingLogs responseRidingLogs = response.body();
// I have my own header and body: inside body there is arraylist
List<yourClass> = responseRidingLogs.body();
//...
}
//...
}
public class ResponseRidingLogs {
public HKRheader header;
public List<RidingLog> body;
}
@覆盖
公共void onResponse(调用、响应){
if(response.body().header.result_code!=0){
//错误处理
}否则{
ResponseRidingLogs ResponseRidingLogs=response.body();
//我有自己的标题和正文:正文中有arraylist
List=responseRidingLogs.body();
//...
}
//...
}
公共类响应日志{
公共阅读器标题;
公共名单机构;
}
是否在自己的协议中添加自己的头和主体并不重要。
如果使用类定义进行JSON通信,则无需查看JSON协议内部。您只需与server developer定义“同一类”。访问此链接。我可以帮你。
public class WordRepo {
private String name;
private String description;
public String getDescription() {
return description;
}
public String getWords() {
return name;
}
}
public class JSONResponse {
private WordRepo[] words;
public WordRepo[] getList() {
return words;
}
@Override
public void onResponse(Call<ResponseRidingLogs> call, Response<ResponseRidingLogs> response) {
if(response.body().header.result_code != 0) {
// Error handling
} else {
ResponseRidingLogs responseRidingLogs = response.body();
// I have my own header and body: inside body there is arraylist
List<yourClass> = responseRidingLogs.body();
//...
}
//...
}
public class ResponseRidingLogs {
public HKRheader header;
public List<RidingLog> body;
}