2016-04-04 16 views
0

私は、アクティビティのonCreateメソッドにメソッド名Request()を持っています。アクティビティのHTTP応答文字列にアクセス

private void Request() { 
    new PostDataAsyncTask(textEmail, tValue).execute(); 
} 

IAMのがそれで2つの文字列を渡すと、次のように非同期クラスがある:

public class PostDataAsyncTask extends AsyncTask<String, String, String> { 
GameActivity game= new GameActivity(); 
private String data,data1; 
public PostDataAsyncTask(String textEmail, String hello) { 
    data = textEmail; 
    data1= hello; 
} 
long date = System.currentTimeMillis(); 
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMM MM dd, yyyy h:mm a"); 
String dateString = simpleDateFormat.format(Long.valueOf(date)); 

protected void onPreExecute() { 
    super.onPreExecute(); 

} 

@Override 
protected String doInBackground(String... strings) { 
    try { 
      postText(); 



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

@Override 
protected void onPostExecute(String lenghtOfFile) { 

} 



private void postText(){ 
try{ 
    String postReceiverUrl = "http://techcube.pk/game/game.php"; 
    HttpClient httpClient = new DefaultHttpClient(); 

    HttpPost httpPost = new HttpPost(postReceiverUrl); 

    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
    nameValuePairs.add(new BasicNameValuePair("email", data)); 
    nameValuePairs.add(new BasicNameValuePair("score", data1)); 
    nameValuePairs.add(new BasicNameValuePair("datetime", dateString)); 

    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
    HttpResponse response = httpClient.execute(httpPost); 
    HttpEntity resEntity = response.getEntity(); 

    if (resEntity != null) { 

     String responseStr = EntityUtils.toString(resEntity).trim(); 
     Log.v("SuccesS", "Response: " + responseStr); 


    } 

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

は、今私が欲しいものを私がposttext生成された私のMainActivityでresponseStrの値を取得したいということですメソッドと呼ばれる。 MainActivityにこのresponseStr値を表示するにはどうすればよいですか? PostDataAsyncTaskという名前の新しいクラスがあることを忘れないでください。このクラスからresponseStrにアクセスしてmainActivityにトーストまたはTextviewとして表示する方法はありますか? 助けてください

答えて

2

問題のメソッドに渡すインターフェイスを作成できます。たとえば、

public interface INetworkResponse { 
    void onResponse(String response); 
    void onError(Exception e); 
} 

インターフェイスの具体的な実装を作成する必要があります。おそらく、AsyncTaskを呼び出すアクティビティ内の子クラスとして扱われます。

public class MyActivity extends Activity { 

    private void Request() { 
     NetworkResponse response = new NetworkResponse(); 
     new PostDataAsyncTask(textEmail, tValue, response).execute(); 
    } 

    public class NetworkResponse implements INetworkResponse { 

     public void onResponse(String response) { 
      // here is where you would process the response. 
     } 
     public void onError(Exception e) { 
     } 
    } 
} 

次に、新しいインターフェイスを含めるように非同期タスクコンストラクタを変更します。

public class PostDataAsyncTask extends AsyncTask<String, String, String> { 

    GameActivity game= new GameActivity(); 
    private String data,data1; 
    private INetworkResponse myResponse; 

    public PostDataAsyncTask(String textEmail, String hello, INetworkResponse response) { 
     data = textEmail; 
     data1 = hello; 
     myResponse = response 
    } 

    private void postText() { 
     // do some work 
     myResponse.onResponse(myResultString); 
    } 
} 
+0

私はこの卿を試しましたが、NullPointerExceptionという例外があります –

+0

もう一度見てください。私はあなたの試みにもっと具体的に答えを書き直しました。 – Redshirt

+0

最後にありがとうあなたはチャンピオンです:) –

0

あなたのスレッドとUIthreadの間でデータを送信するために、あなたの活動の内側のインナークラスとしてハンドラを作成することができます。

public class YourHandler extends Handler { 
    public YourHandler() { 
     super(); 
    } 
    public synchronized void handleMessage(Message msg) { 

     String data = (String)msg.obj; 
     //Manage the data 

    } 
} 

PostDataAsyncTask

public PostDataAsyncTask(String textEmail, String hello, YourHandler mYourHandler) { 
    data = textEmail; 
    data1= hello; 
    this.mYourHandler = mYourHandler; 
} 

のヘッダにこのオブジェクトを渡しますpostText()内のデータをアクティビティに送信します。

if (resEntity != null) { 

    String responseStr = EntityUtils.toString(resEntity).trim(); 
    msg = Message.obtain(); 
    msg.obj = responseStr; 
    mYourHandler.sendMessage(msg); 
    Log.v("SuccesS", "Response: " + responseStr); 


} 
関連する問題