Arslan Ali
Arslan Ali

Reputation: 371

Access Http response string in the Activity

I have a method name Request() in the onCreate method of the activity.

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

Iam passing two strings in it and the async class is as follows:

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

Now what i want is that i want to get the value of responseStr in my MainActivity that is generated when posttext method called. How to show this responseStr value in the MainActivity? Remember there is a new class that i made named as PostDataAsyncTask so how to access responseStr from this class and show it in my mainActivity as a Toast or Textview? Please Help

Upvotes: 0

Views: 129

Answers (2)

Redshirt
Redshirt

Reputation: 674

You can create an interface that you pass into the method in question. For example

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

You would then need to create a concrete implementation of the interface. perhaps as a child class inside the activity that calls the 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) {
        } 
    }
}

Then change the async task constructor to include the new interface.

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

Upvotes: 2

Miguel Benitez
Miguel Benitez

Reputation: 2322

You can create a Handler as an Inner class inside your Activity to send data between your thread and UIthread:

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

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

    }
}

Pass this object in the header of PostDataAsyncTask

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

and send the data in postText() to the Activity:

if (resEntity != null) {

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


}

Upvotes: 0

Related Questions