Android:从数据库获得响应后,返回上一屏幕

时间:2012-10-29 07:11:19

标签: android json listview

任何人都可以帮助我.. ??我的问题是,在收到来自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屏幕,它回到上一个屏幕,其中有一个文本框和搜索按钮。所以无法显示记录...

每个人都请,任何人都可以解决这个愚蠢的事情吗?

4 个答案:

答案 0 :(得分:2)

  1. 同意CapDroid关于finish(),不要这样做。

  2. 请勿在{{1​​}}内调用create adapter并设置适配器,而是可以在onCreate()内执行此操作。

  3. 你正在做2个开销,不要那样做。

  4. 例如:

    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()方法完成活动。