Java Android ListView未显示,但json中的数据存在
问题是有时列表没有显示,我的网络连接正常。 我试过几次运行这个应用程序。1/10运行,列表在那里,我可以看到数据库中的数据。我真的不知道问题出在哪里 我用截击来获取数据Java Android ListView未显示,但json中的数据存在,java,php,android,sql,Java,Php,Android,Sql,问题是有时列表没有显示,我的网络连接正常。 我试过几次运行这个应用程序。1/10运行,列表在那里,我可以看到数据库中的数据。我真的不知道问题出在哪里 我用截击来获取数据 package com.example.wackyroad.internannouncement; public class MainActivity extends ListActivity { private static final String GET_URL = "http://XXX"; private sta
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);
}
});
}
}
我认为问题在于listview中的数据填充是异步操作。
请求完成后,必须调用updateList()方法 getAnnouncement()是异步操作。
请求完成后,必须调用updateList()方法 在更新hashmap之后调用updateList(),如
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);
}
updateList();
} catch (Exception e) {
e.printStackTrace();
}
试试看{
JSONArray data=jsonResponse.getJSONArray(“公告”);
对于(int i=0;i
在更新hashmap之后调用updateList(),如
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);
}
updateList();
} catch (Exception e) {
e.printStackTrace();
}
试试看{
JSONArray data=jsonResponse.getJSONArray(“公告”);
对于(int i=0;i
我明白了,这就是为什么有时会显示,有时不会显示的原因。谢谢,伙计,我没看到。我看到了,所以这就是为什么有时候它会出现,有时候不会。谢谢,伙计,我没看到。