我正在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阻止所有请求,端口或类似的东西)。
答案 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