2016-04-01 10 views
0

Kullanıcı için iyi bir gün postası olsun ya da olmasın, bu answer çözümünde düzgün çalışmıyor.Edit EditViewView inDüğümüRequest hiçbir şey güncellenmedi

Yeni çözümü AsyncTask sınıfını kullanarak yazmayı düşünüyorum ama aynı zamanda düzgün çalışmıyor. Herkese çok teşekkürler.

class Check extends AsyncTask<String , Void , Void > { 
    private ImageView e; 
    Check(ImageView e) 
    { 
     this.e=e; 
    } 
    @Override 
    protected Void doInBackground(String... params) { 
     int id =Integer.parseInt(params[1]); 
     requestQueue = Volley.newRequestQueue(context); 
     requestQueue.start(); 
     StringRequest request = new StringRequest(Request.Method.GET, params[0], new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       if (response.equals("yes")) 
       { 
        e.setImageResource(R.mipmap.love_post); 
        e.setTag(R.mipmap.love_post); 
       } else { 
        e.setImageResource(R.mipmap.empty_heart); 
        e.setTag(R.mipmap.empty_heart); 
       } 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Log.e("Volley", "Error "); 
      } 
     }); 
     return null; 
    } 

} 
+0

UI Konu olan burada ve AsynTask'ı kaldırın. Kaynağı görüntünün e.setImageDrawable (getResource(). GetDrawable (R.drawable.love_post)) olarak ayarlanması için bunu kullanın; –

cevap

0

, kodu kullanıcı arayüzü Konu değildir workerThread üzerinde çalışır.

otomatik arka planda çalışan iş parçacığına onun isteklerini değişecek volley AsyncTask bir volley requests queue kullanmanın gereksiz olduğunu.

bir yolu Sende handler

Handler handler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     if (msg.what == 1) { 
      // do something change ui 
     } 
    } 
}; 

onResponse yöntemi ait kullanıyor:

// 1.init volley request queue 
// 2.construct a request 
// 3.add the request to volley request queue 

istediğin değişiklik UI conpoments, iki yol var:

Kodları böyle önerdi StringRequest:

çağıran

başka yolu da, runOnUiThread()' in you onResponse method of StringRequest`: Eğer UI ilgili şeyleri güncellemek böylece voleybolu aradığınız her zamankinden StringRequest böylece AsynTask voleybolu gerek diş çekme ve onResponce() idare edecek nasıl

runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     // change ui 
    } 
}); 
+0

Fikrinizi açıkladığınız için çok teşekkürler, işte benimle çalışmak;) –

0

UI görünümünü doInBackground() yönteminde güncelleyemezsiniz. doInBackground(), UI iş parçacığı üzerinde çalışan iş parçacığı üzerinde çalışır. doInBackground yöntemde aşağıdaki gibi OnPostExecute içeride görünümünüzü güncellemeyi deneyin() yöntemi, AsyncTask yılında

class Check extends AsyncTask<String , Void , Void > { 
    private ImageView e; 
    Check(ImageView e){this.e=e;} 
    @Override 
    protected String doInBackground(String... params) { 
     int id =Integer.parseInt(params[1]); 
    String responseText = ""; 
     requestQueue = Volley.newRequestQueue(context); 
     requestQueue.start(); 
     StringRequest request = new StringRequest(Request.Method.GET, params[0], new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
     responseText = response; 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Log.e("Volley", "Error "); 
      } 
     }); 
     return responseText; 
    } 
    @Override 
    protected void onPostExecute(String response) { 
    if (response.equals("yes")){ 
        e.setImageResource(R.mipmap.love_post); 
        e.setTag(R.mipmap.love_post); 
       } else { 
        e.setImageResource(R.mipmap.empty_heart); 
        e.setTag(R.mipmap.empty_heart); 
       } 
    } 
}