2016-04-20 1 views
0

Hallo Leute, ich habe ein spezifisches Problem. Ich verwende Retrofit-Bibliothek für alle meine Netzwerkanrufe. Und ich habe eine Methode, um Punkte an einen anderen Benutzer zu senden, und wenn irgendein Fehler auftritt, gibt der Server mir Code 400 und eine Zeichenkette zurück, die ich dem Benutzer zeigen muss. Diese Sache funktioniert Ich habe es so erstellt (NetworkSDK sendet einen Körper mit Params und erwarten, eine Fehlerstatuszeichenfolge zu erhalten, wenn es auftritt) so logisch verarbeitet ich meine Fehler in onResponse Methode (wenn Networksdk ein Objekt mit Fehlerzeichenfolge erhalten) und Wenn onFailure auftritt, ist kein Fehler aufgetreten. Aber jetzt habe ich ein größeres Problem. Wenn es überhaupt keine Verbindung gibt, wenn der Benutzer das Internet in diesem Fragment ausschaltet, wird er wieder zu onFailure gehen und die Nachricht anzeigen, dass Punkte gesendet werden. Gewöhnlich würde ich das über Statuscode tun, wenn Statuscode 200 ist, als es OK ist, aber aus irgendwelchen Gründen kann ich keinen Statuscode über response.code() erhalten. Hier ist der Code:Warum Nachrüstung kann nicht aufgelöst werden Keine Verbindung - Überprüfen Sie die Internetverbindung auf Android?

@Override 
    public void onClick(View v) { 
     try { 
      final String cardNo; 
      String amountstring = bodovi.getText().toString(); 
      final Integer amount = Integer.valueOf(amountstring); 
      cardNo = brojkartice.getText().toString(); 
      Log.d("Broj bodova:", amount.toString()); 
      Log.d("Broj kartice:", cardNo); 
      final SendPoints Posiljka = new SendPoints(); 
      Posiljka.setAmount(amount); 
      Posiljka.setCardNumber(cardNo); 
       NetworkSDK.getInstance().SendPoints(Posiljka, new Callback<SendPointsResponse>() { 
        @Override 
        public void onResponse(Call<SendPointsResponse> call, Response<SendPointsResponse> response) { 

         Log.d("Response code:", "" + response.code()); 
         Log.d("Kartica", Posiljka.getCardNumber()); 
         Log.d("Broj bodova", Posiljka.getAmount().toString()); 


         try { 
          SendPointsResponse error = (new Gson()).fromJson(response.errorBody().string(), SendPointsResponse.class); 

          if (error.getCode().equals("-1")) 
           Toast.makeText(getActivity(), "Neuspješno slanje bodoava. Neispravni ulazni podaci.", Toast.LENGTH_SHORT).show(); 
          if (error.getCode().equals("-2")) 
           Toast.makeText(getActivity(), "Neuspješno slanje bodova. Korisnički podaci nisu popunjeni.", Toast.LENGTH_SHORT).show(); 
          if (error.getCode().equals("-3")) 
           Toast.makeText(getActivity(), "Neuspješno slanje bodova. Korisnik ima rezervisanu nagradu.", Toast.LENGTH_SHORT).show(); 
          if (error.getCode().equals("-4")) 
           Toast.makeText(getActivity(), "Neuspješno slanje bodova. U toku jednog mjeseca bodove je moguće poslati maksimalno dva puta.", Toast.LENGTH_SHORT).show(); 
          if (error.getCode().equals("-5")) 
           Toast.makeText(getActivity(), "Neuspješno slanje bodova. Bodove nije moguće poslati samom sebi.", Toast.LENGTH_SHORT).show(); 
          if (error.getCode().equals("-6")) 
           Toast.makeText(getActivity(), "Neuspješno slanje bodova. Korisnik ne može primiti bodove.", Toast.LENGTH_SHORT).show(); 
          if (error.getCode().equals("-100")) 
           Toast.makeText(getActivity(), "Neuspješno slanje bodova. Greška nepoznata.", Toast.LENGTH_SHORT).show(); 


         } catch (IOException e) { 
          e.printStackTrace(); 
         } 


        } 

        @Override 
        public void onFailure(Call<SendPointsResponse> call, Throwable t) { 

         Toast.makeText(getActivity(), "Uspješno slanje bodova.", Toast.LENGTH_SHORT).show(); 
        } 
       }); 



     }catch (Exception e) { 
      Toast.makeText(getActivity(), "Podaci nisu ispravni, provjerite podatke !", Toast.LENGTH_SHORT).show(); 

     } } 

}); 


} 

ich basicly eine Vorstellung in OnFailure Methode müssen erkennen, wenn Benutzer ausgeschaltet Internet ist und die richtige Nachricht angezeigt werden soll.

Antwort

0

Sie können dies überprüfen link wo wird im Detail erklärt, wenn Internet-Verbindung Status verfügbar ist, die ConnectivityManager über den Connectivity Service.

Beachten Sie, dass Ihre App-Berechtigungen zum Erhalten des Netzwerkstatus benötigen:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+0

Es ist nun gut, ich Netzwerk-Checker-Funktion hat, aber ich vergaß Erlaubnis –

+0

Großen gehören! Ich wies ausdrücklich darauf hin, dass wir etwas vergessen, um es zu vergessen. – Jorge