我正在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請求,而不連接到計算機,被阻止端口或什麼,我不知道。 –