任何人都可以帮助我.. ??我的问题是,在收到来自json的响应后[来自webservice,其中有Select查询来获取记录],而不是在listview中显示它回到上一个屏幕这是我的示例代码..
public class MainActivity5 extends ListActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.custom_list_view);
Intent i = getIntent();
phNumber = i.getStringExtra("phn_no");
new SearchCustomer().execute();
ListAdapter adapter = new SimpleAdapter(this, customerList, R.layout.activity_main5, new String[] { TAG_F_NAME, TAG_C_PHONE }, new int[] { R.id.TextViewName, R.id.TextViewPhone });
setListAdapter(adapter);
}
class SearchCustomer extends AsyncTask<String, String, String> {
private boolean successFlag;
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity5.this);
pDialog.setMessage("Searching Customer..");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
protected String doInBackground(String... args) {
String inputPhnNoText = phNumber;
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("phno", inputPhnNoText));
JSONObject json = jsonParser.makeHttpRequest(url_search_customer, "POST", params);
Log.d("Search Response", json.toString());
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
successFlag = true;
result = json.getJSONArray(TAG_RESULT);
for (int i = 0; i < result.length(); i++) {
JSONObject c = result.getJSONObject(i);
String id = c.getString(TAG_ID);
String fname = c.getString(TAG_F_NAME);
String phoneNumber = c.getString(TAG_C_PHONE);
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_ID, id);
map.put(TAG_F_NAME, fname);
map.put(TAG_C_PHONE, phoneNumber);
// adding HashList to ArrayList
customerList.add(map);
}
}
else {
successFlag = false;
}
}
catch (JSONException e) {
Log.e("log_tag", "Error parsing data " + e.toString());
}
return null;
}
protected void onPostExecute(String file_url) {
pDialog.dismiss();
finish();
}
}
}
这是我的活动文件代码..在doinbackground customerList我得到了我想要的确切数据,但问题是它没有停留在custom_list_view屏幕,它回到上一个屏幕,其中有一个文本框和搜索按钮。所以无法显示记录...
每个人都请,任何人都可以解决这个愚蠢的事情吗?
答案 0 :(得分:2)
同意CapDroid关于finish(),不要这样做。
请勿在{{1}}内调用create adapter并设置适配器,而是可以在onCreate()
内执行此操作。
你正在做2个开销,不要那样做。
例如:
onPostExecute()
无需执行此类开销,而是可以通过扩展 for (int i = 0; i < result.length(); i++) {
JSONObject c = result.getJSONObject(i);
String id = c.getString(TAG_ID);
String fname = c.getString(TAG_F_NAME);
String phoneNumber = c.getString(TAG_C_PHONE);
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_ID, id);
map.put(TAG_F_NAME, fname);
map.put(TAG_C_PHONE, phoneNumber);
// adding HashList to ArrayList
customerList.add(map);
}
来创建自定义适配器,这样您就不需要准备ArrayAdapter<JSONObject>
,而是可以直接添加HashMap
。
答案 1 :(得分:1)
只需从代码中的onPostExecute中删除finish()
即可。
protected void onPostExecute(String file_url) {
pDialog.dismiss();
ListAdapter adapter = new SimpleAdapter(this, customerList, R.layout.activity_main5, new String[] { TAG_F_NAME, TAG_C_PHONE }, new int[] { R.id.TextViewName, R.id.TextViewPhone });
setListAdapter(adapter);
}
答案 2 :(得分:1)
你的
完成()
方法关闭你的活动,所以删除它。
答案 3 :(得分:0)
请勿使用onPostExecute()
方法完成活动。