2013-03-15 48 views
0

我有一個單獨的類爲異步任務。我如何將異步任務類的值返回給主類。誰能幫我?如何從android中的異步任務返回值?

在主類調用異步任務類

String product_id,av_quantity; 
Stock_updatetask = new Stock_update(); 
Stock_updatetask.execute(product_id,av_quantity); 

異步任務類

public class Stock_update extends AsyncTask<String, Void, String> { 

JSONObject json = new JSONObject(); 

JSONArray jsonarray; 

String stock_update; 

protected String doInBackground(String... params) { 

    try { 

     // checkInternetConnection(); 

     HttpClient client = new DefaultHttpClient(); 
     HttpConnectionParams.setConnectionTimeout(client.getParams(),20000); 
     HttpConnectionParams.setSoTimeout(client.getParams(), 20000); 

     HttpResponse response; 

     HttpPost post = new HttpPost("http://www.name.in/cakefoodnew/customer/stockUpdate?json="); 

     json.put("submenu_id", "" + params[0]); 
     json.put("available_quantity", "" + params[1]); 
     // Log.v("id", ""+json); 

     post.setHeader("json", json.toString()); 
     StringEntity se = new StringEntity(json.toString()); 

     se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json")); 
     post.setEntity(se); 
     response = client.execute(post); 

     if (response != null) { 
      // get a data 
      InputStream in = response.getEntity().getContent(); 
      String a = convertStreamToString(in); 
      // Log.v("id", ""+a); 

      try { 

       jsonarray = new JSONArray("[" + a + "]"); 
       json = jsonarray.getJSONObject(0); 
       stock_update = (json.getString("Success")); 

如何將stock_update字符串值返回到主類。

} catch (Exception e) { 

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

    return null; 
} 

protected void onPostExecute(String result) { 

    /* 
    * if (stock_update.equalsIgnoreCase("1")) { 
    * 
    * progressDialog.dismiss(); 
    * Toast.makeText(getApplicationContext(),"Stock updated", 
    * 700).show(); 
    * 
    * } 
    * 
    * else if (stock_update.equalsIgnoreCase("0")){ 
    * 
    * progressDialog.dismiss(); 
    * Toast.makeText(getApplicationContext(),"Stock not updated", 
    * 700).show(); 
    * 
    * } 
    */ 
} 

// Json response 
private String convertStreamToString(InputStream is) { 
     // TODO Auto-generated method stub 
     BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
     StringBuilder sb = new StringBuilder(); 

     String line = null; 

     try { 
      while ((line = reader.readLine()) != null) { 

       sb.append(line + "\n"); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       is.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return sb.toString(); 
    } 
} 
+0

你的主類調用一些方法? – Sajmon 2013-03-15 11:52:06

+0

http://stackoverflow.com/a/9963705/1434631 – Nermeen 2013-03-15 11:52:45

+0

@Sajmon ya將字符串值異步任務類返回到主類。 – Yugesh 2013-03-15 12:16:22

回答

0

通常,我在main class中創建我的AsyncTasks。但是,如果您使用不同的文件,則可以在asynctask中創建一個getter方法。你可以添加一個OnPostExecuteListener,當它被調用時,你可以調用成員方法來獲得結果。

+0

@Hardik如何使用getter方法。 – Yugesh 2013-03-15 12:15:11

+0

public yourObyectType getMyResult(){ return myResult; } – 2013-03-15 12:23:42

+0

我沒有得到一個值。 – Yugesh 2013-03-15 13:09:14

0

您可以讓你傳遞給異步類或該變量的簡單get方法的接口。

+0

如何使用get方法。 – Yugesh 2013-03-15 12:18:21

+0

@Yugesh get方法只是返回你需要的值,但你應該去看一些'AsyncTask'的例子。你可能需要的僅僅是使用'onPostExecute'方法來處理返回的結果。 – 2013-03-15 12:26:22

0

回調方法怎麼樣?

您將主類作爲參數傳遞。比你想要使用返回的字符串onPostExecute()

+0

如何回調主類,在postexecute()過程中我認爲在後臺完成。 – Yugesh 2013-03-17 06:46:31