Android - Volley request throws ECONNREFUSED when App is closed

时间秒杀一切 提交于 2020-01-06 14:55:39

问题


I have an alarm manager that runs an intentservice which fetch data from a server every minute and then sends a notification. Problem is when the app is opened i can still get the data but if the app is closed it sends it throws ECONNREFUSED.

VOLLEY ERROR:

java.util.concurrent.ExecutionException:com.android.volley.NoConnectionError:
java.net.ConnectException: failed to connect to samples.openweathermap.org/138.201.197.100 (port 443) AFTER 2500ms: isConnected failed: ECONNREFUSED (Connection refused)

Testing in Android 5.1.1

Main Activity:

 private void scheduleAlarm() {
    Intent toastIntent= new Intent(getApplicationContext(),MyBroadcastReceiver.class);
    PendingIntent toastAlarmIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, toastIntent,PendingIntent.FLAG_UPDATE_CURRENT);
    long startTime=System.currentTimeMillis(); //alarm starts immediately
    AlarmManager backupAlarmMgr=(AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
    backupAlarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP,startTime,1000*30,toastAlarmIntent); // alarm will repeat after every 15 minutes
}

Broadcast Receiver:

public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
   MyJobIntentService.enqueueWork(context,intent);
}}

MyJobIntentService:

public class MyJobIntentService extends JobIntentService {
private String status="";

public static void enqueueWork(Context context, Intent work) {
    enqueueWork(context, MyJobIntentService.class, 1000, work);
}

@Override
protected void onHandleWork(@NonNull Intent intent) {
    RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
    String url = "http://forsitefloodapp.xyz/Func/Func_GetFloodReportsBarangay";
    RequestFuture<JSONArray> future = RequestFuture.newFuture();
    JsonArrayRequest request = new JsonArrayRequest(url,future,future);
    requestQueue.add(request);

    try {
        JSONArray response = future.get(10, java.util.concurrent.TimeUnit.SECONDS);
        int size = response.length();

        if(size==0){
            status="NO REPORTS";
        }
        else {
            status="REPORTS DETECTED";
        }

    } catch (InterruptedException e) { status="Interuppted";

    } catch (ExecutionException e) { status=e.toString();

    } catch (TimeoutException e) { status="Timeout";

    }
    Log.i("MyJobIntentService", "Completed service @ " + status);

    //Sends notification
}}

回答1:


intentservice will not work as background service (app closed) from api 21 and above ..if you just target api 21 onwards use JobScheduler API...if you target Api 14 onwards(Oreo or pre-Oreo) use JobIntentService as its the modernway.your alarm manager should trigger broadcastreceiver which start the service when the time is up. service will fetch the data and send notification for that.



来源:https://stackoverflow.com/questions/52018770/android-volley-request-throws-econnrefused-when-app-is-closed

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!