Android HTTP客户端问题

时间:2012-03-06 03:29:00

标签: android httpclient

我希望有人能找到这个问题。我有一个完全在服务器通信中工作的应用程序。不幸的是,当我转移到Windows 8 CP时,我以某种方式丢失了我的Eclipse工作区。我仍然有.apk,使用Dex2jar和jd-gui,我能够挽救很多代码。我已经把它全部恢复到工作状态,但是这个。我正在尝试将URL发送到服务器,并获取字符串响应。这是代码:

import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;

public class login extends Activity{

<code>

public void pushLogin(View paramView){

  try{
    HttpClient client = new DefaultHttpClient();
    HttpGet request = new HttpGet(loginFinal);
    ResponseHandler<String> responseHandler = new BasicResponseHandler();
    errorTextView.setText(loginFinal);

    //code gets here
    String response = client.execute(request, responseHandler);
    //does not get here
    errorTextView.setText(response);
  }

我的TextView始终包含字符串loginFinal,我无法让它显示响应。为了检查这一点,我在尝试获取String响应后将errorTextView.setText(loginFinal);移动到该行。它也没有在那一点上运行。我正在撕扯我的头发,我确信它很简单。我已经获得了互联网许可,我甚至在这个网站上找到了这个应用程序部分的原始代码,因为我发布它要求另外一个问题。据我所知,这段代码完全相同。我能想到的唯一改变的是我将我的构建目标从Froyo转移到Honeycomb,因为我决定将重点放在平板电脑上。

最好的部分是,当我按下按钮,触发pushLogin时,LogCat绝对没有任何作用。它似乎根本没有触发client.execute(request, responseHandler)

1 个答案:

答案 0 :(得分:0)

您可能在UI线程上调用了pushLogin(),请注意,自API Level 11(HONEYCOMB)以来,线程策略已经更改,简而言之,不允许在UI线程上执行网络操作(包括HttpClient和HttpUrlConnection) ,否则你得到NetworkOnMainThreadException。正确的策略是在后台线程上调用pushLogin()(AsycnTask作为一个很好的例子)。

希望得到这个帮助。