Je suis nouveau sur Retrofit2, en essayant d'analyser une URL avec un tableau, mais il essaie de l'analyser en tant qu'objet afin que je reçoive ce message. Je ne sais pas vraiment où est le problème.Retrofit2, obtention d'un tableau mais analyse en tant qu'objet dans recyclerview
java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
J'ai suivi ce tutoriel https://www.learn2crack.com/2016/02/recyclerview-json-parsing.html
Voici mon activité
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();
}
});
}
mon Recycleradapter
public class WordRecyclerAdapter extends
RecyclerView.Adapter<WordRecyclerAdapter.ViewHolder> {
private ArrayList<WordRepo> values;
public WordRecyclerAdapter(ArrayList<WordRepo> values) {
this.values = values;
}
@Override
public WordRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.recyclerview_words, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(WordRecyclerAdapter.ViewHolder viewholder, int i) {
viewholder.word.setText(values.get(i).getWords());
viewholder.description.setText(values.get(i).getDescription());
}
@Override
public int getItemCount() {
return values.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView word, description;
public ViewHolder(View view) {
super(view);
word = (TextView) view.findViewById(R.id.word);
description = (TextView) view.findViewById(R.id.word_description);
}
}
}
Dans terface
public interface WordInterface {
@GET("categories/{categoryID}/words")
Call<JSONResponse> getJSON(@Path("categoryID") int categoryID);
}
Getter/Setter
public class WordRepo {
private String name;
private String description;
public String getDescription() {
return description;
}
public String getWords() {
return name;
}
}
de classe JSONResponse
public class JSONResponse {
private WordRepo[] words;
public WordRepo[] getList() {
return words;
}
Visitez ce lien. Peut vous aider. https://stackoverflow.com/a/38351872/6021469. –