我正在尝试从互联网获取数据,并将其填充到列表视图中。我有一个功能齐全的自定义适配器,名为NoticeAdapter。 Arraylist不会附加动态创建的对象。
我的错是什么?我已经花了8个小时才找到问题。但是没有找到。没有显示错误,但没有创建列表视图。如果我做一个简单的一两个对象 在onCreate方法中,然后将其添加到list中。效果很好。
请任何人帮助我。 预先感谢
ListView noticeList;
NoticeAdapter na;
public String title, file_link, dept, pubDate;
在这里我清除数据全局变量
public ArrayList<NoticeModel> data = new ArrayList<>();
String serverUrl = "http://192.168.0.104/virtualclassroomapi/notice.php";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notice_board);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
noticeList = (ListView) findViewById(R.id.noticelist);
我在这里打电话来从Internet获取数据并将其另存为数据中的对象
getDataFromServer();
如果在这里我称之为“ getData();”那么它将起作用
na = new NoticeAdapter(data, getApplicationContext());
noticeList.setAdapter(na);
}
public void getDataFromServer(){
StringRequest request = new StringRequest(Request.Method.POST, serverUrl, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONArray jsonArray = new JSONArray(response);
for (int i =0; i<jsonArray.length();i++)
{
try {
JSONObject jsonObject = jsonArray.getJSONObject(i);
title = jsonObject.getString("title");
file_link = jsonObject.getString("file_link");
dept = jsonObject.getString("dept");
pubDate = jsonObject.getString("publish_date");
我使用Toast测试了服务器的响应。但不能作为新对象附加到data(Arraylist)全局变量中
data.add(new NoticeModel(title,file_link,dept,pubDate));
} catch (JSONException e) {
e.printStackTrace();
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(NoticeBoard.this,"Response Error",Toast.LENGTH_LONG).show();
}
});
MySingleton.getInstance(NoticeBoard.this).addToRequestQueue(request);
}
从此处插入的数据但未从此处插入,如果我调用它而不是getDataFromServer()
public void getData(){
String title = "title from varable";
data.add(new NoticeModel(title,"something", "get","sthe"));
}
答案 0 :(得分:0)
将数据添加到适配器后,您应该告诉适配器已更改,因此调用na.notifyDataSetChanged();
答案 1 :(得分:0)
首先,您必须在其中添加项目:
JSONArray jsonArray = new JSONArray(response);
for (int i =0; i<jsonArray.length();i++)
{
NoticeModel item = new NoticeModel();
JSONObject jsonObject = jsonArray.getJSONObject(i);
item.setTitle(jsonObject.getString("title"));
item.setFileLink(jsonObject.getString("file_link"));
item.setDept(jsonObject.getString("dept"));
item.setPublishDate(jsonObject.getString("publish_date"));
data.add(item);
}
然后在for循环之后设置适配器:
na = new NoticeAdapter(data, getApplicationContext());
noticeList.setAdapter(na);
并在您的适配器中提及:
na.notifyDataSetChanged();