ListView没有显示使用改装-Android获取的响应



我正在使用Reform向API发出GET请求,我的应用程序在我获得响应时成功地发出了请求,但我想将该响应显示到ListView中,但该响应没有显示在ListView中。我的代码如下:

MainActivity.java:-

public class MainActivity extends AppCompatActivity {
ListView myListView;
List<Todo> myArrayList = new ArrayList<Todo>();
ArrayAdapter<Todo> myArrayAdapter;
private static final String TAG = "MainActivity";
ApiInterface apiInterface;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myArrayAdapter = new ArrayAdapter<Todo>(MainActivity.this , android.R.layout.simple_list_item_1 , myArrayList);
myListView = (ListView) findViewById(R.id.myListView);
myListView.setAdapter(myArrayAdapter);
apiInterface = ApiClient.getClient().create(ApiInterface.class);
}
public void getTodo(View view) {
Call<List<Todo>> getCall = apiInterface.getTodo();
getCall.enqueue(new Callback<List<Todo>>() {
@Override
public void onResponse(Call<List<Todo>> call, Response<List<Todo>> response) {
Log.e(TAG , "onResponse : "+response.body());
myArrayList = response.body();
myArrayAdapter.notifyDataSetChanged();
//                Log.e(TAG , "arraylist : "+myArrayList);  // This Log is printing data in arraylist which means myArrayList contains data.
}
@Override
public void onFailure(Call<List<Todo>> call, Throwable t) {
Log.e(TAG , "onFailure : "+t.getLocalizedMessage());
}
});
}
}

我的Todo.java类如下:

Todo.java:-

public class Todo {
private String _id;
private String name;
private String added_date;
private int __v;
public Todo(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Todo{" +
"_id='" + _id + ''' +
", name='" + name + ''' +
", added_date='" + added_date + ''' +
", __v=" + __v +
'}';
}
}

样本响应如下:

onResponse : [Todo{_id='5f9140a5827320001796726f', name='Attend Meeting', 
added_date='2021-04-30T08:19:49.400Z', __v=0}]

myArrayList = response.body();更改为myArrayList.addAll(response.body());

并将您的toString更新为类似的内容

@Override
public String toString() {
return name;
} 

这样,您的ListView看起来很整洁,而不是一个大的令人困惑的String。

我没有看到您在任何地方使用收到的数据。将空列表myArrayList传递给适配器构造函数。

myArrayAdapter = new ArrayAdapter<Todo>(MainActivity.this , android.R.layout.simple_list_item_1 , myArrayList);

当您从API获取数据时,只需将其分配给列表,而不将其传递给适配器。移动代码的这一部分

myArrayAdapter = new ArrayAdapter<Todo>(MainActivity.this , android.R.layout.simple_list_item_1 , myArrayList); myListView.setAdapter(myArrayAdapter);

对于on response方法,在将数据分配给列表后,或将方法添加到适配器中,适配器可以更新列表,然后调用myArrayAdapter.notifyDataSetChanged();

最新更新