我正在Android中的后台服务中发送HTTP请求到服务器。只要设备通过USB电缆连接到计算机,他就可以正常工作。如果设备未连接到计算机 - 服务仍然发送请求,但它们未到服务器。如果我再次将设备插入计算机 - 所有发出的请求都会立即发送到服务器。从后台服务发送http请求到服务器失败
我使用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();
}
工作液
我真的shoked,当我发现,请求到服务器不应该仅仅从被称为后台线程,但带回调结构,提供接口。
在我的服务,我开始的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操作系统阻止所有请求,端口或类似的东西)。
你可以把你的代码和未连接到计算机时发生的错误..! –
没有收到错误 - 连接到计算机或没有关系。看起来像我不能发送HTTP请求,而不连接到计算机,被阻止端口或什么,我不知道。 –