从后台服务向服务器发送http请求失败

时间:2012-09-24 06:13:18

标签: android httprequest

我正在Android中的后台服务中向服务器发送HTTP请求。当设备通过USB线连接到计算机时,他工作正常。如果设备未连接到计算机 - 服务仍然发送请求,但他们没有来到服务器。如果我再次将设备插入计算机 - 所有发送的请求将立即发送到服务器。

我正在使用AsyncTask发送请求。

Web服务运行良好,我用hurl.it测试它 我无法理解是什么原因。

编辑:
我正在使用 - >

发送请求
        URL url = null;
    URLConnection connection = null;

    InputStream inputStream = null;

    String strURL = String.format("%s/%s", serviceURL, params);
    try{
    url = new URL(strURL);
    connection = url.openConnection();
    connection.connect();

    inputStream = new BufferedInputStream(url.openStream());
    }catch(IOException ioe){
        ioe.printStackTrace();
    }

工作解决方案
我发现,当我发现服务器的请求不仅应该来自后台线程,还应该使用回调构造来提供接口时,我真的很兴奋。

在我的服务中,我正在启动AsyncTask

MyTask task = new MyTask(); 
task.execute((Void)null);

在服务类

中实现接口AsyncTaskHost
...
@Override
public void onTaskStart(){
    // sending http request to server using method from above
}
@Override
public void onTaskFinish(){
    // doing additional work here, after getting response from request
}

我的界面:

public interface AsyncTaskHost{
    public void onTaskStart();
    public void onTaskFinish();
}

我的异步任务类:

public class UploadCoordinates extends AsyncTask<Void, Integer, Void> {
private AsyncTaskHost taskHost;
private Context context;

public UploadCoordinates(Context context, AsyncTaskHost taskHost) {
    this.taskHost = taskHost;
    this.context = context;
}

@Override
protected Void doInBackground(Void... params) {
    taskHost.onTaskStart();

    return null;
}

@Override
protected void onPreExecute() {
    super.onPreExecute();
}

@Override
protected void onProgressUpdate(Integer... progress) {
    super.onProgressUpdate(progress);
}

@Override
protected void onPostExecute(Void param) {
    if (isCancelled()) {
        return;
    }

    taskHost.onUploadFinish();
}
}

现在一切正常。没有接口,异步任务不想在没有usb电缆的情况下工作。我不知道,这对我来说是神奇的(或Android OS阻止所有请求,端口或类似的东西)。

3 个答案:

答案 0 :(得分:0)

看看这是否有帮助:

URL url = null;
InputStream inputStream = null;

String strURL = String.format("%s/%s", serviceURL, params);
HttpClient httpclient = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(httpclient.getParams(), 10000);

 try{
    url = new URL(strURL);
    HttpPost httppost = new HttpPost(url);

    HttpResponse response = httpclient.execute(httppost);

    inputStream = new BufferedInputStream(url.openStream());
  }catch(IOException ioe){
    ioe.printStackTrace();
}

答案 1 :(得分:0)

取决于你想做什么,你也可以尝试jsoup.org

中的jsoup

判断它只在连接USB电缆时才有效。尝试在计算机上停用互联网,并仅在手机上启用互联网。可能是某些一般的互联网共享设置正在干扰。

答案 2 :(得分:0)

我知道这是一个我回答的帖子,因为我遇到了同样的问题,它消化了我2-3个小时才能解决。问题是当通过模拟器向“本地”服务器发送请求时以及如果您编写

http://localhost:8080/yourapp/yourServelt

它不会向服务器发送请求。您必须提到您机器的IP地址,即

http://10.0.0.15:8080/yourapp/yourServlet