0

Детали:Почему вызов HttpUrlConnection Post дает java.io.FileNotFoundException при вызове его из службы, вызванной диспетчером аварийных сигналов?

  1. В моей основной деятельности я создаю тревогу со следующим кодом:

    Intent myIntent1 = new Intent(MainActivity.this, AlarmReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent1,PendingIntent.FLAG_CANCEL_CURRENT); 
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), constants.INTERVAL , pendingIntent); 
    
  2. Тогда в AlarmReceiver я вызвать службу со следующим кодом:

    @Override 
        public void onReceive(final Context context, Intent intent) { 
    
        Intent in = new Intent(context, LocationPoll.class); 
        context.startService(in); 
        } 
    
  3. Ниже приведена LocationPoll.java, которая расширяет сервис и реализует приемник местоположения, который onLocationChanged делает f ollowing. Я использую GoogleApiClient для получения обновлений. Я просто передаю данные json и ожидаю ответа json.

    @Override 
    public void onLocationChanged(Location location) { 
    String url = constants.BASE_URL+constants.TRACK_URL; 
    JSONObject jsonBody = new JSONObject(); 
    try { 
        jsonBody.put("latitude", location.getLatitude()); 
        jsonBody.put("longitude",location.getLongitude()); 
        jsonBody.put("driver_id", constants.DRIVERID); 
    
    } 
    catch(Exception e){ 
    
    } 
    JSONRequest jr = new JSONRequest(jsonBody,url,this); 
    jr.execute(); 
    } 
    
  4. JSONRequest Asynct Задача выполняет следующие действия, чтобы сделать запись вызова с помощью HttpURLConnection:

    URL urlConnection = new URL(url); 
        System.setProperty("http.keepAlive", "false"); 
        connection = (HttpURLConnection) urlConnection 
          .openConnection(); 
        connection.setDoOutput(true); 
        connection.setChunkedStreamingMode(0); 
        connection.setDoInput(true); 
        connection.setRequestProperty("Accept", "*/*"); 
        connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); 
        connection.setRequestProperty("Accept-Encoding","gzip, deflate"); 
        connection.setRequestProperty("Accept-Language", "en-US,en;q=0.8,hi;q=0.6"); 
        connection.setRequestProperty("Connection", "close"); 
        connection.setRequestMethod("POST"); 
    
    
        OutputStream os = connection.getOutputStream(); 
        os.write(data.toString().getBytes("UTF-8")); 
        os.close(); 
        connection.connect(); 
        _map= connection.getHeaderFields(); 
        responsecode = connection.getResponseCode(); 
    

выше работает отлично, когда приложение находится на переднем плане или фонового состояния. Но когда приложение находится в состоянии уничтожения, состояние обновления местоположения выходит из строя с ошибкой: java.io.FileNotFoundException. Пожалуйста помогите.

Logcat:

 10-14 18:50:03.806 17841-18041/? W/System.err﹕    java.io.FileNotFoundException: http://example.com 
     10-14 18:50:03.807 17841-18041/? W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:197) 
     10-14 18:50:03.807 17841-18041/? W/System.err﹕ at java.net.URLConnection$DefaultContentHandler.getContent(URLConnection.java:1017) 
     10-14 18:50:03.807 17841-18041/? W/System.err﹕ at java.net.URLConnection.getContent(URLConnection.java:199) 
     10-14 18:50:03.807 17841-18041/? W/System.err﹕ at com.bikeninja.driver_app.asynctasks.JSONRequest.doInBackground(JSONRequest.java:70) 
     10-14 18:50:03.807 17841-18041/? W/System.err﹕ at com.bikeninja.driver_app.asynctasks.JSONRequest.doInBackground(JSONRequest.java:23) 
     10-14 18:50:03.807 17841-18041/? W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288) 
     10-14 18:50:03.807 17841-18041/? W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
     10-14 18:50:03.807 17841-18041/? W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
     10-14 18:50:03.807 17841-18041/? W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
     10-14 18:50:03.807 17841-18041/? W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
     10-14 18:50:03.809 17841-18041/? W/System.err﹕ at java.lang.Thread.run(Thread.java:818) 
+0

Укажите, что такое 'константы'. Это файл? как это разрешено? ... также, когда вы спрашиваете, вставьте свой Logcat в вопрос. – Bonatti

+0

@Bonatti constants.INTERVAL - значение, установленное в миллисекундах –

+0

, а не 'constants.INTERNAL', а' константы'. Что это такое, это файл? Кроме того, где находится ваш logcat – Bonatti

ответ

0

Просто для информации чьего. В моем случае, когда приложение находилось в состоянии смерти, данные JSON, которые я проходил, имели одно из полей null. Причина, по которой я читал из файла констант в приложении, который не был доступен, когда приложение было убито. Следовательно, используется для получения 404 с сервера. Решение должно было прочитать его из SharedPreferences.

Смежные вопросы