2017-04-09 54 views
-3

首先我必须说,我已阅读本:获取从OnPostExecute Android的返回值

How to get the return value from onpostexecute method in android?

这:

How do I return a boolean from AsyncTask?

没有帮助,也许我不明白他们在说什么。 这是我的porblem: 我只需要找回在我的OnPostExecute方法的字符串值。 不是从doInBackground,我需要从我的OnPostExecute。

我的代码:

public void max(String build,String cls) 
{ 

    BackgroundTask3 myTask = new BackgroundTask3(); 
    myTask.execute(build,cls); 


    Toast.makeText(getApplicationContext(),"fcur is" + Fcur,Toast.LENGTH_LONG).show(); 

} 

和:

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

    String capacity_url; 
    @Override 
    protected void onProgressUpdate(Void... values) { 
     super.onProgressUpdate(values); 
    } 

    @Override 
    protected void onPostExecute(String result) { 
    String finalValue; 
     json_capacity = result; 
     finalValue=parseMax(); 
     Toast.makeText(getApplicationContext(),"finalValue is" + finalValue,Toast.LENGTH_LONG).show(); 
     super.onPostExecute(result); 

    } 

    @Override 
    protected void onPreExecute() { 
     capacity_url = "http://www.skedge.co.il/ANCurrentCapacity.php"; 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     String cls,build; 
     build= params[0]; 
     cls = params[1]; 

     try { 
      URL url = new URL (capacity_url); 
      HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 
      httpURLConnection.setRequestMethod("POST"); 
      httpURLConnection.setDoOutput(true); 
      OutputStream outputStream = httpURLConnection.getOutputStream(); 
      BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream,"UTF-8")); 
      String data_string = URLEncoder.encode("Fclass","UTF-8")+"="+URLEncoder.encode(cls,"UTF-8")+"&"+ 
        URLEncoder.encode("building","UTF-8")+"="+URLEncoder.encode(build,"UTF-8")+"&"+ 
        URLEncoder.encode("hour","UTF-8")+"="+URLEncoder.encode(hour,"UTF-8"); 
      bufferedWriter.write(data_string); 
      bufferedWriter.flush(); 
      bufferedWriter.close(); 
      //here is the new 
      InputStream inputStream = httpURLConnection.getInputStream(); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"UTF-8")); 
      StringBuilder stringBuilder = new StringBuilder(); 
      while ((JSON_STRING = bufferedReader.readLine())!= null) 
      { 
       stringBuilder.append(JSON_STRING+"\n"); 
      } 
      outputStream.close(); 
      inputStream.close(); 
      httpURLConnection.disconnect(); 
      return stringBuilder.toString().trim(); 


     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return null; 

    } 
} 

所有我想要做的是: 分配是在OnPostExecute内最终值的字符串值,到Fcur(公共字符串)这是最大的功能。

看起来很简单,但由于某种原因,我无法完成它。

获得从后台线程回调

回答

2

最好的办法是使用interfaces作为回调从AsyncTask例如:

创建可以在onPostExecute()

public interface ResponseCallback { 

    void onRespond(); 
} 

,并呼吁asynckTask定义之前调用的接口它是这样的:

ResponseCallback callback = new ResponseCallback() { 
      @Override 
      public void onRespond() { 
       //code to be done after calling it from onPostExecute 
      } 
     }; 

,并通过callback到0123的asynckTask的并调用它在onPostExecute


当然

可以修改interface的签名任何你想要的东西。

+1

我利用这一点也是因为认为接口是实现对asyncTask回调响应的更好方法。 –

+0

@Yarden Rotem,试试这个:http://stackoverflow.com/a/13815960/3332734 –