2017-04-09 27 views
-3
私が言っているすべての

まず、私はこれを読んでいる:アンドロイドOnPostExecuteからの戻り値を取得します

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

そしてそれ:なし助けを借りて

How do I return a boolean from AsyncTask?

、多分私彼らが何を言っているのか分からなかった。 ここに私のポーランドがあります: 私はただ私のOnPostExecuteメソッドにあるString値を取得する必要があります。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; 

    } 
} 

私がやりたいすべてがある: はFcur(パブリック文字列)に、OnPostExecute内部終値文字列である値を割り当てますこれは内部から最大限の機能です。

非常に単純に見えますが、なんらかの理由で私はそれを行うことができません。バックグラウンドスレッドからのコールバックを取得する

答えて

2

ベストな方法は、例えばAsyncTaskからコールバックとしてinterfacesを使用することです:

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ののとは、あなたが今まであなたが望むものにinterfaceの署名を変更することができ、もちろんonPostExecute


でそれを呼び出します。

+1

これは、asyncTaskコールバックへの応答を実装するためのより良い方法であると考えているため、これも使用します。 –

+0

@ Yarden Rotem、これを試してください:http://stackoverflow.com/a/13815960/3332734 –

関連する問題