java - 为什么 Retrofit 无法解决 Android 上的“无连接 - 检查互联网连接”问题?

标签 java android android-studio networking retrofit

大家好,我有一个具体问题。我正在使用改造库来进行所有网络调用。我有一种方法可以将点发送给另一个用户,如果发生任何错误,服务器将返回代码 400 以及我必须向用户显示的字符串。这个东西正在工作,我像这样创建了它(NetworkSDK正在发送一个带有参数的主体,并期望在发生时收到一个错误状态字符串),所以从逻辑上讲,我正在onResponse方法中处理我的错误(如果Networksdk收到一个带有错误字符串的对象),并且如果onFailure发生,则没有错误。但现在我有一个更大的问题。如果根本没有连接,如果用户关闭该 fragment 中的互联网,它将再次转到 onFailure 并显示点已发送的消息。通常,如果状态代码为 200,我会通过状态代码执行此操作,但由于某些原因,我无法通过 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 方法中的一些想法来检测用户是否关闭互联网并显示正确的消息。

最佳答案

您可以查看这个link如果通过连接服务使用 ConnectivityManager 获取互联网连接状态,请在其中详细说明。

请注意,您的应用需要获取网络状态的权限:

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

关于java - 为什么 Retrofit 无法解决 Android 上的“无连接 - 检查互联网连接”问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36738167/

相关文章:

android - 为什么我在使用 imageView.getWidth() 时得到 0 值

Android Studio 主题编辑器不显示预览?

java - jcr 查询结构

Java错误: Bad Operand Type for binary operator <

java - 当年龄范围差异很大时,如何缩放图表上的数据以便更好地查看?

android - 从不同计算机导入项目后无法解析库

java - ExtAudioRecorder : "write failed: EBADF (Bad file descriptor) " in recording Audio to WAV files - Android Studio

java - Math.Ceil 的浮点精度 (Java)

java - Android Client 和 PC Server 使用套接字通信

android - 我需要 JobService 每 15 - 20 分钟唤醒一次