2012-10-29 82 views
0

任何人都可以幫助我.. ??我的問題是,從json [它來自webservice,因爲有select select查詢記錄]得到響應後,而不是顯示在列表視圖它回到前一屏幕這裏是我的示例代碼..Android:從數據庫得到迴應後,回到前一屏幕

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屏幕中,它返回到上一個屏幕,其中有一個文本框和搜索按鈕。所以不能顯示記錄...

大家請,能有人給這個愚蠢的東西解決嗎?

回答

2
  1. 同意CapDroid關於finish(),不要這樣做。

  2. 不要在onCreate()內部調用創建適配器和設置適配器,而應該在onPostExecute()之內完成。

  3. 你正在做2個開銷,不要那樣做。

例如:

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,而不是你可直接添加JSONObject

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); 


    } 
+0

喜奇拉格和CapDroid .. 感謝的是,通知我..它沒有回到先前的屏幕ATLEAST ..但問題仍然存在的數據在此屏幕顯示..並在logcat中我找到了這樣的響應:: {「result」:[{「customer_lname」:「last name」,「customer_fname」:「first name」,「customer_id」:「1」,「customer_phone」:「1111100000」}] 「成功」:1} 屏幕是空白..所以你可以幫助更多.. ?? –

+0

檢查我的更新回答 –

+0

非常感謝你兄弟..它的解決... :) –

0

請不要在onPostExecute()方法中完成活動。

+1

@Chirag Raval和我做了同樣的答案,所以你應該投票而不是相同的答案 –

+0

@CapDroid你也應該這樣做。 – URAndroid

+0

我正在做同樣的..你可以檢查我第一次回答所有的時間 –

1

完成()

方法關閉您的活動,以便刪除此。

+0

@Chirag Raval和我做了同樣的答案,所以你應該上漲投票,而不是相同的答案 –