gpt4 book ai didi

java - 在获取 JSON 数据之前检查互联网连接 | waitFor() 返回 1

转载 作者:行者123 更新时间:2023-11-30 01:57:48 25 4
gpt4 key购买 nike

我在 Activity 中通过 AsyncTask 获取 JSON 数据,如下所示:

@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
// Load the plants via AsyncTask
new LoadItems().execute();
}

public class LoadItems extends AsyncTask<Void, Void, Boolean> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}

@Override
protected Boolean doInBackground(Void... arg0) {
updateJSONData();
return null;
}

@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
updateList();
}
}

但在获取数据之前,我需要检查连接性。所以我创建了以下类,感谢其他人的代码 fragment :

public class ConnectionCheck {

public static boolean isConnectionOnline() {
Runtime runtime = Runtime.getRuntime();
try {
Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
int exitValue = ipProcess.waitFor();
return (exitValue == 0);
} catch (IOException e) { e.printStackTrace(); }
catch (InterruptedException e) { e.printStackTrace(); }

return false;
}

// Dialog box for connection failure
public static void showConnectionFailureDialogBox(final Context context) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage(R.string.str_dialogBoxMessage);
builder.setPositiveButton(R.string.str_dialogBoxButton,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
((Activity) context).finish();
}
});

AlertDialog alert = builder.create();
alert.show();
}

然后我这样调用那些特制的函数:

@Override
protected void onPreExecute() {
super.onPreExecute();
if (!ConnectionCheck.isConnectionOnline()) {
ConnectionCheck.showConnectionFailureDialogBox(MyActivity.this);
this.cancel(true);
}
}

当互联网连接不存在时,应该会出现一个对话框。但是,它每次都会弹出一个对话框。当我检查我得到的退出值时,它总是 1。从来没有 0。我的代码有问题吗?

还有,好像代码执行的很慢? “那个”是检查连接的正确位置吗?

更新这可能已经晚了,但问题出在我使用的模拟器上。代码没有任何问题。我不能使用答案中建议的方法,因为我确实需要连接到 Internet。我限制我的应用程序在没有任何网络连接时不执行语句,因为它会崩溃。我在某处读到,按照你们建议的方法,即使没有网络连接,条件也会返回 true;只要设备连接在网络中。或者类似的东西。

最佳答案

我会尝试使用更以 Android API 为中心的方式来检查连接性。我们在辅助类中使用以下方法进行检查。它不会总是被触发,但足以满足我们的目的。

public static boolean hasConnectivity(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
return (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected());
}

如果您还没有添加以下权限,您还需要添加:

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

关于java - 在获取 JSON 数据之前检查互联网连接 | waitFor() 返回 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31953832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com