2016-03-02 33 views
0

我送持有人以凌空方法ArrayAdapter像如何持有者觀點發送到的AsyncTask在ArrayAdapter

final ViewHolder finalHolder = holder; 
     holder.rlLike.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 


         userLikes(finalHolder); 
        } 
     }); 

private void userLikes(final ViewHolder finalHolder){ 

      StringRequest request = new StringRequest(Request.Method.POST, user_likes_url, new Response.Listener<String>() { 

       @Override 
       public void onResponse(String response) { 
        if(response != null){ 
         Log.e("LikeResponse", response); 

         try { 
          JSONObject jsonObject = new JSONObject(response); 
          //toastShort(activity, user_likes_obj.getString("data")); 
          if(jsonObject.getString("status").equals("success")){ 



            finalHolder.userLikeImage.setImageResource(R.drawable.icon_pop_like); 
            finalHolder.tvLike.setText("Unlike"); 


          }else { 

          } 


         } catch (JSONException e) { 
          e.getLocalizedMessage(); 
          e.printStackTrace(); 
         } 

        }else{ 

        } 
       } 
      }, new Response.ErrorListener() { 

       @Override 
       public void onErrorResponse(VolleyError error) { 

         Log.e("error", error.toString()); 


       } 
      }){ 
       @Override 
       protected Map<String,String> getParams(){ 
        Map<String,String> params = new HashMap<String, String>(); 
        Log.e("action", user_likes); 
        params.put("action",user_likes); 
        return params; 
       } 

       @Override 
       public Map<String, String> getHeaders() throws AuthFailureError { 
        Map<String,String> params = new HashMap<String, String>(); 
        params.put("Content-Type","application/x-www-form-urlencoded"); 
        return params; 
       } 
      }; 

      RequestQueue queue = Volley.newRequestQueue(context); 
      queue.add(request); 
      queue.getCache().remove(user_likes_url); 
     } 

正從我改變了服務器的成功響應後ImageView和TextView像

finalHolder.userLikeImage.setImageResource(R.drawable.icon_pop_like); 
finalHolder.tvLike.setText("Unlike"); 

但我想發送持有人視圖到異步任務和bassed在服務器上響應我想改變的ImageView和TextView的如上

我的AsyncTask任務的代碼是

private void userLikes(String likeStatus){ 

     class carRegAsynTask extends AsyncTask<String, Void, String>{ 

      //ProgressDialog dialog; 

      @Override 
      protected void onPreExecute() { 
       super.onPreExecute(); 
      } 

      @Override 
      protected String doInBackground(String... params) { 

       String likeStatusParam = params[0]; 

       BasicNameValuePair likeStatus = new BasicNameValuePair("action", likeStatusParam); 


       List<NameValuePair> listValuePairs = new ArrayList<NameValuePair>(); 
       listValuePairs.add(likeStatus); 

       Log.e("listValuePairs", listValuePairs.toString()); 

       String Url = user_likes_url; 
       Log.e("Url", Url); 

       String response = POST_METHOD(listValuePairs, Url); 

       return response; 
      } 

      @Override 
      protected void onPostExecute(String result) { 
       super.onPostExecute(result); 
       if (result != null) { 
        Log.e("LikeResult2", result); 

        try { 
         JSONObject jsonObject = new JSONObject(result); 
         if(jsonObject.getString("status").equals("success")){ 


           userLikeImage.setImageResource(R.drawable.icon_pop_un_like); 
           tvLike.setText("Like"); 

         }else { 

         } 


        } catch (JSONException e) { 
         e.getLocalizedMessage(); 
         e.printStackTrace(); 
        } 

       } 
      } 

     } 

     new carRegAsynTask().execute(likeStatus); 

    } 

所以,請幫我將持有人以Asynchronus任務像凌空方法我上面所討論的,並不要忘了這是一個ArrayAdapter

回答

0

,我不知道是否能跟隨與否,但我以這種方式實現它

private void userLikes(final ViewHolder finalHolder) { 

     class userLikesAsynTask extends AsyncTask<String, Void, String> { 

      @Override 
      protected void onPreExecute() { 
       super.onPreExecute(); 
      } 

      @Override 
      protected String doInBackground(String... params) { 

       BasicNameValuePair userid = new BasicNameValuePair("action", user_likes); 


       List<NameValuePair> listValuePairs = new ArrayList<NameValuePair>(); 
       listValuePairs.add(userid); 

       Log.e("listValuePairs", listValuePairs.toString()); 

       String userLikesUrl = user_likes_url; 
       Log.e("userLikesUrl", userLikesUrl); 

       String response = POST_METHOD(listValuePairs, userLikesUrl); 

       return response; 
      } 

      @Override 
      protected void onPostExecute(String result) { 
       super.onPostExecute(result); 

       if (result != null) { 
        Log.e("userLikesUrlResult", result); 

        try { 
         JSONObject jsonObject = new JSONObject(result); 

         if(jsonObject.has("status")){ 
          if(jsonObject.getString("status").equals("success")){ 

            finalHolder.userLikeImage.setImageResource(R.drawable.icon_pop_like); 
            finalHolder.tvLike.setText("Unlike"); 


          }else { 

          } 
         } 

        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 


       } 
      } 

     } 

     new userLikesAsynTask().execute(); 

    } 
1

雖然這不是一個很好的做法,堅持從異步任務的觀點強引用,你可以通過任何你需要你的carRegAsynTask。只需創建一個構造函數,並將所有需要的數據作爲參數傳遞。

UPDATE

例子:

class carRegAsynTask extends AsyncTask<String, Void, String>{ 
    private final ViewHolder viewHolder; 

    public carRegAsynTask(ViewHolder viewHolder) { 
     this.viewHolder = viewHolder; 
    } 

    // omitted for brevity... 
    // Use your viewHolder in onPreExecute or onPostExecute 
} 


// Creating async task with your viewHolder: 
new carRegAsynTask(viewHolder).execute(likeStatus); 
+0

嗨Gennadii saprykin,我是新來的編碼,如果你不介意的話,你可以給這個 – Bahu

+0

與例如更新的例子。 –

相關問題