问题是有时列表不显示,我的网络连接正常。 我尝试运行该应用程序多次。 1/10 运行,列表就在那里,我可以看到数据库中的数据。我真的不知道问题所在 我正在使用 volley 来获取数据
package com.example.wackyroad.internannouncement;
public class MainActivity extends ListActivity {
private static final String GET_URL = "http://XXX";
private static final String TAG_ID = "id";
private static final String TAG_TITLE = "title";
private static final String TAG_CONTENT = "content";
private static final String TAG_DATE = "date";
private ArrayList<HashMap<String, String>> listArrayList = new ArrayList<HashMap<String, String>>();
private ProgressDialog pDialog;
private ListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getAnnouncement();
updateList();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.refresh) {
return true;
}
return super.onOptionsItemSelected(item);
}
private void getAnnouncement() {
StringRequest postRequest = new StringRequest(Request.Method.POST, GET_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonResponse = new JSONObject(response);
try {
JSONArray data = jsonResponse.getJSONArray("announcements");
for (int i = 0; i < data.length(); i++) {
JSONObject c = data.getJSONObject(i);
HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_ID, c.getString("announcement_id"));
map.put(TAG_TITLE, c.getString("announcement_title"));
map.put(TAG_CONTENT, c.getString("announcement_content"));
map.put(TAG_DATE, c.getString("announcement_date"));
listArrayList.add(map);
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
pDialog.dismiss();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
pDialog.dismiss();
}
}
) {
};
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Getting Announcements..");
pDialog.show();
Volley.newRequestQueue(getApplication()).add(postRequest);
}
private void updateList() {
adapter = new SimpleAdapter(this, listArrayList,
R.layout.activity_lv_list, new String[]{TAG_ID, TAG_TITLE, TAG_CONTENT,
TAG_DATE}, new int[]{R.id.tv_id, R.id.tv_title, R.id.tv_content, R.id.tv_date});
setListAdapter(adapter);
ListView lv = getListView();
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String tv_id = ((TextView) view.findViewById(R.id.tv_id)).getText().toString();
Intent i = new Intent(getApplicationContext(), Announcement_Details.class);
i.putExtra("id", tv_id);
startActivity(i);
}
});
}
}
我尝试记录 jsonResponse 并且实际获取了数据。 这是 jsondata
02-08 10:34:38.676 6258-6258/com.example.wackyroad.internannouncement D/JSONRESPONSE﹕ {"announcements":[{"announcement_title":"Sample Title Here","announcement_content":"Sample Content","announcement_id":"1","announcement_date":"2016-02-04"},{"announcement_title":"Sample Title","announcement_content":"Sample Content Again","announcement_id":"2","announcement_date":"2016-02-04"},{"announcement_title":"It's not working","announcement_content":"I really don't know","announcement_id":"3","announcement_date":"2016-02-08"}],"message":"Post Available!","success":1}
我认为问题出在 ListView 中的数据量
最佳答案
getAnnouncement() 是异步操作。 请求完成后,您必须调用 updateList() 方法。
关于java - Android ListView 未显示,但 json 数据存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35273401/