动态创建的数据未插入全局范围 Arraylist 数据变量
Dynamic created data not inserted global scope Arraylist data variable
我正在尝试从 Internet 获取数据,这些数据将填充到列表视图中。我有一个名为 NoticeAdapter 的功能齐全的自定义适配器。 Arraylist 未附加动态创建的对象。
我的错误是什么?我已经花了 8 个小时才找到 problem.But 找不到。未显示错误但未创建列表视图。如果我做一个简单的一两个对象
在 onCreate 方法中,然后将其添加到列表中。它工作正常。
请任何人帮助我。
提前致谢
ListView noticeList;
NoticeAdapter na;
public String title, file_link, dept, pubDate;
这里我清除data全局变量
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);
这里我调用从网上获取数据并保存为数据中的对象
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 测试来自服务器的响应。但不作为新对象附加到数据(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"));
}
将数据添加到您的适配器后,您应该告诉适配器已更改,因此调用 na.notifyDataSetChanged();
首先你必须在其中添加项目:
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();
我正在尝试从 Internet 获取数据,这些数据将填充到列表视图中。我有一个名为 NoticeAdapter 的功能齐全的自定义适配器。 Arraylist 未附加动态创建的对象。
我的错误是什么?我已经花了 8 个小时才找到 problem.But 找不到。未显示错误但未创建列表视图。如果我做一个简单的一两个对象 在 onCreate 方法中,然后将其添加到列表中。它工作正常。
请任何人帮助我。 提前致谢
ListView noticeList;
NoticeAdapter na;
public String title, file_link, dept, pubDate;
这里我清除data全局变量
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);
这里我调用从网上获取数据并保存为数据中的对象
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 测试来自服务器的响应。但不作为新对象附加到数据(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"));
}
将数据添加到您的适配器后,您应该告诉适配器已更改,因此调用 na.notifyDataSetChanged();
首先你必须在其中添加项目:
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();