【发布时间】:2012-09-15 14:24:16
【问题描述】:
我在 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 操作系统阻止所有请求、端口或类似的东西)。
【问题讨论】:
-
你能把你的代码和没有连接到电脑时出现的错误..!!
-
没有收到错误 - 与计算机是否连接无关。看起来我在不连接计算机的情况下无法发送 http 请求,是端口被阻止还是什么,我不知道。
标签: android httprequest