访问 Activity 中的 Http 响应字符串

Access Http response string in the Activity

我在 activity 的 onCreate 方法中有一个方法名称 Request()。

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

我在其中传递两个字符串,异步class如下:

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 值? 请记住,有一个新的 class,我将其命名为 PostDataAsyncTask 那么如何从这个 class 访问 responseStr 并将其作为 Toast 或 Textview 显示在我的 mainActivity 中? 请帮忙

您可以创建一个接口,将其传递给相关方法。例如

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

然后您需要创建接口的具体实现。也许作为调用 AsyncTask 的 activity 中的 child class。

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);
    }
}

您可以在 Activity 中创建一个处理程序作为内部 class 以在您的线程和 UIthread 之间发送数据:

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

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

    }
}

PostDataAsyncTask

的 header 中传递此 object
public PostDataAsyncTask(String textEmail, String hello, YourHandler mYourHandler) {
    data = textEmail;
    data1= hello;
    this.mYourHandler = mYourHandler;
}

并将 postText() 中的数据发送到 Activity:

if (resEntity != null) {

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


}