簡體   English   中英

為什么Retrofit無法解決無連接 - 檢查Android上的互聯網連接?

[英]Why Retrofit can't resolve No connection - Check internet connection on Android?

大家好我有一個具體的問題。 我正在為我的所有網絡電話使用改造庫。 我有一種方法可以將點發送給另一個用戶,如果發生任何錯誤,服務器將返回代碼400和字符串,我必須向用戶顯示。 這個東西工作我這樣創建它(NetworkSDK發送一個帶有params的主體,並期望收到錯誤狀態字符串,如果它發生)所以邏輯上我在onResponse方法處理我的錯誤(如果Networksdk收到一個帶有錯誤字符串的對象)和如果onFailure發生,則沒有錯誤。 但現在我有一個更大的問題。 如果根本沒有連接,如果用戶關閉該片段中的互聯網,它將再次轉到onFailure並顯示已發送點的消息。 普通的我會通過狀態代碼執行此操作,如果狀態代碼是200而不是它的okey但由於某些原因我無法通過response.code()命令獲取任何狀態代碼。 這是代碼:

  @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();

        }   }

});


}

我基本上需要OnFailure方法的一些想法來檢測用戶是否關閉了互聯網並顯示正確的消息。

如果Internet連接狀態可用,可以通過連接服務查看ConnectivityManager可以查看此鏈接的詳細說明。

請注意,您的應用需要獲取網絡狀態的權限:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM