2016-10-01 22 views
0

私はasyncクラスの結果データを文字列変数に追加したいのですが、私は非同期クラスのobjを作成している間にメインクラスから文字列変数を渡しています。 asyncクラスの結果値をその文字列に代入していますが、メインクラスの文字列を出力すると結果値が得られませんでした。主なクラスからの文字列とそのtextviewに結果の値を設定し、私は結果の値を持ってメインから値を取得するには、私は文字列を渡すことによって同じ機能をしたいテキストビュー。Android非同期クラス投稿機能

私はasyncclass呼び出していますかザッツ:

getCountryId getCountryid=new getCountryId(this, roleField); // rolefield is textview 
    getCountryid.execute(itemcountry); 

私の非同期クラスです:代わりに

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

private Context context; 
private TextView role; 

public getCountryId(Context context, TextView role){ 
    this.context=context; 
    this.role=role; 
} 


protected void onPreExecute(){ 

} 

@Override 
protected String doInBackground(String... arg0) { 
    try{ 
     String z = (String)arg0[0]; 

     String link="http://ipadress/regform/getstateid.php"; 
     String data = URLEncoder.encode("z", "UTF-8") + "=" + URLEncoder.encode(z, "UTF-8"); 

     URL url = new URL(link); 
     URLConnection conn = url.openConnection(); 

     conn.setDoOutput(true); 
     OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 

     wr.write(data); 
     wr.flush(); 

     BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

     StringBuilder sb = new StringBuilder(); 
     String line = null; 

     // Read Server Response 
     while((line = reader.readLine()) != null) 
     { 
      sb.append(line); 
      break; 
     } 
     return sb.toString(); 
    } 
    catch(Exception e){ 
     return new String("Exception: " + e.getMessage()); 
    } 
} 


@Override 
protected void onPostExecute(String result){ 
    role.setText(result); 
} 

}

答えて

0

使用のStringBuilder:また

StringBuilder myStrBuild = new StringBuilder(); 
... 
getCountryId getCountryid=new getCountryId(this, myStrBuild); 

、あなたのコードを説明していないMainActivityがAsyncTaskの結果をどのように読み取るかを示します。 MainActivityは、以前のものではなく、onPostExecuteの後に結果を読み取る必要があることに注意してください。 AsyncTasがジョブを終了すると、たとえば、いくつかのMainActivity関数( "presentResult"と呼ぶ)を呼び出すことができます。 StringBuilderではなくStringを本当に使いたい場合、presentResult()はString引数を受け入れることもできます。 良い解決策が提示されましたhere

+0

私のpostメソッドでは、asyncの結果値をasyncのTextview(ロール)に設定しました。私のメインクラスでは、そのTextViewのgetText()関数を呼び出してテキストを取得します。 –

+0

助けてくれてありがとう。 –