2016-04-04 5 views
0

Ich habe einen Methodennamen Request() in der onCreate-Methode der Aktivität.Zugriff auf Http-Antwortstring in der Aktivität

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

Iam vorbei zwei Saiten in ihm und der Asynchron-Klasse ist wie folgt:

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

Nun, was ich will, ist, dass ich den Wert von responseStr in meinem MainActivity erhalten möchten, dass, wenn posttext erzeugt wird Methode genannt. Wie wird dieser ResponseStr-Wert in der MainActivity angezeigt? Erinnern Sie sich, es gibt eine neue Klasse, die ich als PostDataAsyncTask benannt, so wie Sie auf ResponseStr von dieser Klasse zugreifen und es in meiner MainActivity als Toast oder Textview anzeigen? Bitte Hilfe

Antwort

2

Sie können eine Schnittstelle erstellen, die Sie an die betreffende Methode übergeben. Zum Beispiel

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

Sie müssten dann eine konkrete Implementierung der Schnittstelle erstellen. vielleicht als Kind-Klasse innerhalb der Aktivität, die die AsyncTask aufruft.

Ändern Sie dann den asynchronen Taskkonstruktor, um die neue Schnittstelle einzuschließen.

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

Ich versuchte dieses Sir, aber es gibt mir eine Ausnahme, NullPointerException –

+0

zu sagen, ein anderes Aussehen. Ich habe meine Antwort umgeschrieben, um genauer zu sein, was du versuchst. – Redshirt

+0

hat endlich funktioniert Vielen Dank, du bist Champion :) –

0

Sie können einen Handler als eine innere Klasse innerhalb Ihrer Aktivität erstellen, um Daten zwischen Ihrem Thread und UIthread zu senden:

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

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

    } 
} 

Dieses Objekt wird in der Kopfzeile PostDataAsyncTask

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

und senden Sie die Daten in PostText() an die Aktivität:

if (resEntity != null) { 

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


}