Java 为什么改装可以';t解决无连接问题-在Android上检查互联网连接?
大家好,我有一个特别的问题。我所有的网络通话都使用翻新库。我有一个方法可以向另一个用户发送点,如果发生任何错误,服务器将返回代码400,并在旁边显示字符串,我必须向用户显示。这个东西正在工作,我是这样创建的(NetworkSDK发送一个带有参数的主体,如果出现错误状态字符串,则希望收到),因此从逻辑上讲,我在Java 为什么改装可以';t解决无连接问题-在Android上检查互联网连接?,java,android,android-studio,networking,retrofit,Java,Android,Android Studio,Networking,Retrofit,大家好,我有一个特别的问题。我所有的网络通话都使用翻新库。我有一个方法可以向另一个用户发送点,如果发生任何错误,服务器将返回代码400,并在旁边显示字符串,我必须向用户显示。这个东西正在工作,我是这样创建的(NetworkSDK发送一个带有参数的主体,如果出现错误状态字符串,则希望收到),因此从逻辑上讲,我在onResponse方法中处理我的错误(如果NetworkSDK收到一个带有错误字符串的对象),如果发生onFailure,则没有错误。但现在我有一个更大的问题。若根本并没有连接,若用户在该
onResponse
方法中处理我的错误(如果NetworkSDK收到一个带有错误字符串的对象),如果发生onFailure
,则没有错误。但现在我有一个更大的问题。若根本并没有连接,若用户在该片段中关闭internet,它将再次转到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();
} }
});
}
@覆盖
公共void onClick(视图v){
试一试{
最终字符串卡号;
String amountstring=bodovi.getText().toString();
最终整数金额=Integer.valueOf(amountstring);
cardNo=brojkartie.getText().toString();
Log.d(“Broj bodova:,amount.toString());
Log.d(“Broj kartice:,cardNo”);
final SendPoints Posiljka=新SendPoints();
Posiljka.setAmount(金额);
Posiljka.设置卡号(卡号);
NetworkSDK.getInstance().SendPoints(Posiljka,new Callback()){
@凌驾
公共void onResponse(调用、响应){
Log.d(“响应代码:”,“+Response.code());
Log.d(“Kartica”,Posiljka.getCardNumber());
Log.d(“Broj bodova”,Posiljka.getAmount().toString());
试一试{
SendPointsResponse error=(new Gson()).fromJson(response.errorBody().string(),SendPointsResponse.class);
if(error.getCode().equals(“-1”))
Toast.makeText(getActivity(),“Neuspješno slanje bodoava.Neisravni ulazni podaci.”,Toast.LENGTH_SHORT).show();
if(error.getCode().equals(“-2”))
Toast.makeText(getActivity(),“Neuspješno slanje bodova.Korisnički podaci nisu popungeni.”,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();
}捕获(IOE异常){
e、 printStackTrace();
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Toast.makeText(getActivity(),“Uspješno slanje bodova.”,Toast.LENGTH_SHORT.show();
}
});
}捕获(例外e){
Toast.makeText(getActivity(),“Podaci nisu ispravni,provjerite podatke!”,Toast.LENGTH_SHORT.show();
} }
});
}
我基本上需要一些关于OnFailure方法的想法来检测用户是否关闭了internet并显示正确的消息 如果internet连接状态可通过连接服务在ConnectivityManager
中使用,则可以检查此项,其中有详细说明
请注意,您的应用程序需要获得网络状态的权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
如果internet连接状态在ConnectivityManager
中通过连接服务可用,您可以在此处查看详细说明
请注意,您的应用程序需要获得网络状态的权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
现在很好,我做了网络检查器功能,但忘了包括权限太好了!我明确指出,因为这是我们用来遗忘的东西;)这是好的,现在我做了网络检查功能,但我忘了包括许可证太棒了!我明确指出,因为这是我们用来遗忘的东西;)