【问题标题】:Access Http response string in the Activity在Activity中访问Http响应字符串
【发布时间】:2016-04-04 15:13:04
【问题描述】:

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

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

我在里面传入了两个字符串,异步类如下:

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 并将其作为 Toast 或 Textview 显示在我的 mainActivity 中? 请帮忙

【问题讨论】:

    标签: android string http android-asynctask httpresponse


    【解决方案1】:

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

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

    然后您需要创建接口的具体实现。可能作为调用 AsyncTask 的 Activity 中的子类。

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

    【讨论】:

    • 我试过这个先生,但它给了我一个异常说 NullPointerException
    • 再看看。我已经重写了我的答案,以更具体地说明您的尝试。
    【解决方案2】:

    您可以在 Activity 中创建一个 Handler 作为 Inner 类,以在您的线程和 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() 中的数据发送到 Activity:

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

    【讨论】:

      猜你喜欢
      • 2016-12-05
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多