2015-04-19 95 views
0

我有我的listview顯示我的本地主機數據庫中的數據庫條目。我想每次單擊listview項目時刪除一行。然後計數器更新並刷新列表。有任何想法嗎?使用Async Class刪除Listview項目?

類:

public class ViewAllLocations extends ListActivity { 

String id; 

// Progress Dialog 
private ProgressDialog pDialog; 

// JSON parser class 
JSONParser jsonParser = new JSONParser(); 

ArrayList<HashMap<String, String>> profileList; 

// url to get all products list 
private static String url_all_profile = "http://MYIP:8888/android_connect/get_all_location.php"; 
// url to delete product 
private static final String url_delete_profile = "http://MYIP:8888/android_connect/delete_location.php"; 

// JSON Node names 
private static final String TAG_SUCCESS = "success"; 
private static final String TAG_LOCATION = "Location"; 
private static final String TAG_ID = "id"; 
private static final String TAG_LATITUDE = "latitude"; 
private static final String TAG_LONGITUDE = "longitude"; 


// products JSONArray 
JSONArray userprofile = null; 

TextView locationCount; 
int count = 0; 
Button deleteLocation; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_view_all_locations); 
    // Hashmap for ListView 
    profileList = new ArrayList<HashMap<String, String>>(); 

    deleteLocation = (Button) findViewById(R.id.deleteLocation); 
    locationCount = (TextView) findViewById(R.id.locationCount); 

    // Loading products in Background Thread 
     new LoadAllLocation().execute(); 



    // Get listview 
     ListView lo = getListView(); 
     lo.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       new DeleteLocation().execute(); 
       profileList.remove(position); 
      } 
     }); 
    } 

    /***************************************************************** 
    * Background Async Task to Delete Product 
    * */ 
    class DeleteLocation extends AsyncTask<String, String, String> { 


     /** 
    * Before starting background thread Show Progress Dialog 
    * */ 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(ViewAllLocations.this); 
     pDialog.setMessage("Deleting Location..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
    } 

    /** 
    * Deleting product 
    * */ 
    protected String doInBackground(String... args) { 

     // Check for success tag 
     int success; 
     try { 
      // Building Parameters 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      params.add(new BasicNameValuePair("id", id)); 

      // getting product details by making HTTP request 
      JSONObject json = jsonParser.makeHttpRequest(
        url_delete_profile, "POST", params); 

      // check your log for json response 
      Log.d("Delete Product", json.toString()); 

      // json success tag 
      success = json.getInt(TAG_SUCCESS); 
      if (success == 1) { 
       // product successfully deleted 
       // notify previous activity by sending code 100 
       // Intent i = getIntent(); 
       // send result code 100 to notify about product deletion 
       //setResult(100, i); 
       Toast.makeText(getApplicationContext(), "Location Deleted", 
         Toast.LENGTH_SHORT).show(); 
       finish(); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 


    /** 
    * After completing background task Dismiss the progress dialog 
    * **/ 
    protected void onPostExecute(String file_url) { 
     // dismiss the dialog once product deleted 
     pDialog.dismiss(); 

    } 

} 

/** 
* Background Async Task to Load all product by making HTTP Request 
* */ 
class LoadAllLocation extends AsyncTask<String, String, String> { 

    /** 
    * Before starting background thread Show Progress Dialog 
    * */ 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(ViewAllLocations.this); 
     pDialog.setMessage("Loading Locations. Please wait..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(false); 
     pDialog.show(); 
    } 

    /** 
    * getting All products from url 
    * */ 
    protected String doInBackground(String... args) { 
     // Building Parameters 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     // getting JSON string from URL 
     JSONObject json = jsonParser.makeHttpRequest(url_all_profile, "GET", params); 

     // Check your log cat for JSON reponse 
     Log.d("All Profiles: ", json.toString()); 

     try { 
      // Checking for SUCCESS TAG 
      int success = json.getInt(TAG_SUCCESS); 

      if (success == 1) { 
       // products found 
       // Getting Array of Products 
       userprofile = json.getJSONArray(TAG_LOCATION); 

       // looping through All Products 
       for (int i = 0; i < userprofile.length(); i++) { 
        JSONObject c = userprofile.getJSONObject(i); 

        // Storing each json item in variable 
        String id = c.getString(TAG_ID); 
        String latitude = c.getString(TAG_LATITUDE); 
        String longitude = c.getString(TAG_LONGITUDE); 


        // 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_LATITUDE, latitude); 
        map.put(TAG_LONGITUDE, longitude); 


        // adding HashList to ArrayList 
        profileList.add(map); 
       } 
      } else { 
       // no products found 
       // Launch Add New product Activity 
       Intent i = new Intent(getApplicationContext(), 
         UserLocation.class); 
       // Closing all previous activities 
       i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(i); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 

    /** 
    * After completing background task Dismiss the progress dialog 
    * **/ 
    protected void onPostExecute(String file_url) { 
     // dismiss the dialog after getting all products 
     pDialog.dismiss(); 
     // updating UI from Background Thread 
     runOnUiThread(new Runnable() { 
      public void run() { 
       /** 
       * Updating parsed JSON data into ListView 
       * */ 


       ListAdapter adapter = new SimpleAdapter(
         ViewAllLocations.this, profileList, 
         R.layout.locationitem, new String[] { TAG_ID, 
         TAG_LATITUDE, TAG_LONGITUDE}, 
         new int[] { R.id.id, R.id.latitude, R.id.longitude}); 
       // updating listview 
       setListAdapter(adapter); 
       locationCount.setText(""+profileList.size()); 

      } 
     }); 

    } 

} 
+0

什麼問題? –

+0

@AnubianNoob我不能讓它與listview匹配?在我添加按鈕之前,我有一個onItemClickListener並運行異步執行,但是我不會收到一個只是空白的錯誤,並且不能刪除任何東西?基於我的代碼的任何想法,我現在需要做什麼按鈕?另外我不知道如何獲得選擇鏈接並刪除它們,同時刷新列表視圖和更新計數器? –

回答

0

,當你成功地刪除產品,您還需要從列表中刪除該產品。

使用yourList.remove(position)並讓您的列表刷新。

+0

你能解釋一下我的代碼嗎? –

+0

如果產品 if(成功== 1)profileList.remove(position); Toast.makeText(getApplicationContext(),「Location Deleted」, Toast.LENGTH_SHORT).show(); finish(); } –

+0

@Divya ...它不工作,無法識別位置...我的列表視圖沒有真正引用,並通過異步類傳遞...在我的XML它有ID /列表 –