2016-04-29 5 views
0

Ich versuche, mein Gerät aufzuwecken, um eine Netzwerkanforderung zu stellen. Wenn ich den Wecker auf ein oder zwei Minuten stelle. Es funktioniert perfekt. Aber wenn ich es auf ungefähr 10 Minuten einstelle und meine Anzeige abstelle, wird der Alarm ausgelöst, aber Volley wirft einen "NoConnectionError" wie im Titel gezeigt.volley NoConnectionError: java.net.UnknownHostException

Ich habe recherchiert, ich habe meinen Empfänger mit einem WakeFullBroadCastReceiver implementiert. Danach bekam ich das gleiche Problem. Ich recherchierte weiter und fügte meinem WLAN eine Sperre hinzu. Trotzdem bekomme ich denselben Fehler.

Bitte jede Hilfe wird geschätzt.

Empfänger:

@Override 
public void onReceive (Context context, Intent intent) { 
    Log.i("Receiver", "Called here"); 
    Intent serIntent1 = new Intent(context, FetchTodayWordService.class); 
    startWakefulService(context, serIntent1); 
} 

Dienst

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.i("SERVICE", "started"); 
    WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
    lock = wifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL, "LockTag"); 
    lock.acquire(); 
    MakeRequest(intent); 
    return START_STICKY; 
} 

@Override 
protected void onHandleIntent (Intent intent) { 
    Log.i("OUTPUT", "Service called"); 
    MakeRequest(intent); 
} 
public void MakeRequest(final Intent intent) 
{ 
    if (intent == null) return; 
    JsonObjectRequest jsonObjectRequest = 
      new JsonObjectRequest 
        (Request.Method.GET, url, null, new Response.Listener<JSONObject>() { 
         @Override 
         public void onResponse (JSONObject response) { 
          lock.release(); 
          wordDay = ParseWordDay.ParseJSON(response); 
          if(wordDay != null) 
          { 
           new StoreData().DoWork(getApplicationContext(), wordDay, intent); 

          } 

         } 
        }, 
          new Response.ErrorListener() { 
           @Override 
           public void onErrorResponse (VolleyError error) { 
            TodayWordReceiver.completeWakefulIntent(intent); 
            lock.release(); 
            Log.i("OUTPUT", String.valueOf(error)); 
           } 
          }); 

    MySingleton.getInstance(getApplicationContext()).addToRequestQueue(jsonObjectRequest); 
} 

Einstellung Alarm:

private void SetAlarm() { 

    int alarmType = AlarmManager.ELAPSED_REALTIME; 
    final int TIME = 1000 * 60 * 5; 
    Intent intent = new Intent(this, TodayWordReceiver.class); 

    /*boolean alarmUp = (PendingIntent.getBroadcast(getApplicationContext(), 
      1, intent, PendingIntent.FLAG_NO_CREATE) != null); 
    if (!alarmUp) 
    {*/ 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1, intent, 0); 
     AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     alarmManager.setRepeating(alarmType, SystemClock.elapsedRealtime() + TIME, 
       TIME, pendingIntent); 
     Toast.makeText(this, "Alarm Set", Toast.LENGTH_SHORT).show(); 
    /*}else Toast.makeText(MainActivity.this, "ALarm already set", Toast.LENGTH_SHORT).show();*/ 
} 

Fehlerausgang:

04-29 23:48:23.125 15702-15702/com.example.clinton.light I/Receiver: Called here 04-29 23:48:23.145 15702-15702/com.example.clinton.light I/SERVICE: started 04-29 23:48:23.175 15702-15702/com.example.clinton.light I/OUTPUT: com.android.volley.NoConnectionError: java.net.UnknownHostException: Unable to resolve host "api.wordnik.com": No address associated with hostname

Jede Hilfe wird wirklich geschätzt. Ich kann deine Antwort möglicherweise nicht markieren, ich habe nicht genug Punkte.

+1

Überprüfen Sie Ihre erweiterten Wifi-Einstellungen auf Ihrem Gerät und prüfen Sie, ob "WLAN im Schlaf eingeschaltet" auf "immer" eingestellt ist – freddieptf

+0

Ist auf "immer" eingestellt. –

Antwort

0

UnknowHostException ist ein sehr allgemeiner Fehler, wenn entweder der Proxy heruntergefahren ist, die Netzwerkverbindung unterbrochen ist oder ein DNS-Problem vorliegt. Überprüfen Sie die Sitzung, in der der Prozess ausgeführt wird, und sehen Sie, ob ein Problem mit der Zeitüberschreitung der Sitzung auftreten kann.

+0

Hi Minh, wie überprüfe ich die Sitzung, in der der Prozess läuft? Können Sie ein wenig ausarbeiten? Immer noch ein Amateur in diesen Dingen ... –

+0

Ich legte die URL in meinem Browser und erfrischte etwa 20 mal, keiner von mir gab mir ein Netzwerkproblem –

+0

Es tut mir leid, ich bin nicht in der Lage, die URL zur Verfügung zu stellen, benötigen Sie einen API-Schlüssel damit es funktioniert. Was ist geheim :) –

1

Ich erkannte, dass der Netzwerkbetrieb nur erfolgreich war, wenn der Bildschirm eingeschaltet ist (wenn das Gerät wach ist). So ersetzte ich den Alarmtyp

int alarmType = AlarmManager.ELAPSED_REALTIME_WAKEUP; statt:

int alarmType = AlarmManager.ELAPSED_REALTIME; 

Und das reparierte es. Keine Notwendigkeit, Sperren auf WLAN zu machen oder irgendwelche schlafenden Threads zu verwenden.

So voll AlarmCode wird unten für zukünftige Referenz gezeigt: Bitte verwenden Sie nicht das WLAN-Schloss in der Frage gezeigt.

private void SetAlarm() { 

    int alarmType = AlarmManager.ELAPSED_REALTIME_WAKEUP; 
    final int TIME = 1000 * 60 * 5; 
    Intent intent = new Intent(this, TodayWordReceiver.class); 

    /*boolean alarmUp = (PendingIntent.getBroadcast(getApplicationContext(), 
      1, intent, PendingIntent.FLAG_NO_CREATE) != null); 
    if (!alarmUp) 
    {*/ 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1, intent, 0); 
     AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     alarmManager.setRepeating(alarmType, SystemClock.elapsedRealtime() + TIME, 
       TIME, pendingIntent); 
     Toast.makeText(this, "Alarm Set", Toast.LENGTH_SHORT).show(); 
    /*}else Toast.makeText(MainActivity.this, "ALarm already set", Toast.LENGTH_SHORT).show();*/ 
} 

Und das war's!