2017-09-07 107 views
0

我有一次應用程序停止應發位置, 一個應用程序我重寫的onStop方法和它運行的服務完美 但也達到了當位置發送者什麼都沒有發生,這裏是我的服務代碼:異步任務不會觸發

@Override 
    public void onCreate() { 
     super.onCreate(); 
     dbHelper = new DBHelper(this); 
     warnniSharedPreference = new WarnniSharedPreference(this); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     LocationSender locationSender = new LocationSender(); 
     locationSender.execute(); 
     return android.app.Service.START_NOT_STICKY; 
    } 
    private class LocationSender extends AsyncTask<Void, Void, Void> { 
     @Override 
     protected void onPostExecute(Void aVoid) { 
      super.onPostExecute(aVoid); 
      if (null != response) { 
      dbHelper.deleteAllRecords(DBHelper.LOCATION_TRACKER_TABLE_NAME); 
       dbHelper.deleteAllRecords(DBHelper.IMAGES_TABLE_NAME); 
      } 
     } 
     @Override 
     protected Void doInBackground(Void... voids) { 
      try { 
       int start = 0; 
       int end = 0; 
       ArrayList<WarnniLocation> locationArrayList = dbHelper.getAllLocationRecords(); 
       int locationGroupSize = (int) Math.ceil((double) locationArrayList.size()/(double) 60); 
       for (int i = 0; i < locationGroupSize; i++) { 
        MultipartUtility multipartUtility = new MultipartUtility(Constants.ADD_LOCATION_DATA, "UTF-8"); 
        multipartUtility.addFilePart("image", new File(imagesPaths.get(i))); 
        multipartUtility.addFormField("driverId", String.valueOf(warnniSharedPreference.getKey("id"))); 
        if (i == 0) { 
         end = 59; 
        } else { 
         end = i * 60 + 59; 
         if (end >= locationArrayList.size()) { 
          end = locationArrayList.size() - 1; 
         } 
        } 
        multipartUtility.addFormField("locations", new Gson().toJson(locationArrayList.subList(start, end))); 
        response = multipartUtility.finish(); 
       } 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 
    } 

,請提前通知 感謝和任何幫助將不勝感激

+0

爲什麼在服務中使用'AsyncTask'?服務已經在後臺運行。 – Yupi

+0

那我應該直接發送請求嗎? –

+0

我得到了android.os.NetworkOnMainThreadException –

回答

0

您好是服務沒有問題usind的AsyncTask。所有你需要做的只是使用doin後臺方法,因爲它只能在後臺運行。但onPostExecute方法在ui線程上運行。所以刪除onPostExecute方法。

+0

感謝您的時間,以及我的活動已經運行了一項服務,我無法在同一活動中運行兩項服務? –

+0

哪些服務您使用意向服務或正常服務? –