我有一个执行 2 个操作的按钮。一种是检查互联网/服务器连接,另一种是如果有互联网/服务器连接,则从服务器获取数据。
我现在面临的问题是我的按钮只会执行检查互联网/服务器连接的操作,但不会跟进该连接的结果以进行下一个操作。
但是,当我再次按下按钮时,它会执行第二个 Action 。
我的代码有问题吗?我需要一些建议。
正在检查互联网/服务器连接
public Boolean isOnline() {
try {
p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com");
int returnVal = p1.waitFor();
boolean reachable = (returnVal == 0);
if (reachable) {
new uploadDB(new uploadDB.returnResult() {
@Override
public void onFinish(String result) {
if (result.equalsIgnoreCase("success")) {
isInternetConnected = true;
} else {
isInternetConnected = false;
showdialog("No Internet Connection", "Connection to server failed.");
}
}
}).execute("ping");
} else {
isInternetConnected = false;
showdialog("No Internet", "Internet connection is needed to perform certain actions.");
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
按钮点击
@Override
public void onHistoryClick(final int position) {
isOnline();
if(isInternetConnected == true)
{
runOnUiThread(new Runnable() {
@Override
public void run() {
pd.setMessage("Retrieving History Information...");
pd.setIndeterminate(true);
pd.setCancelable(false);
pd.show();
}
});
new uploadDB(new uploadDB.returnResult() {
@Override
public void onFinish(String result) {
if(result != null)
{
Intent intent = new Intent(MainActivity.this, HistoryYearActivity.class);
intent.putExtra("barrelUUID", barrelList.get(position).getBeaconUUID());
intent.putExtra("barrelName", barrelList.get(position).getBarrelName());
intent.putExtra("result", result);
startActivity(intent);
pd.dismiss();
}
}
}).execute("historypageall",barrelList.get(position).getBeaconUUID());
}
}
最佳答案
使用此方法检查互联网连接
public static boolean checkInternet(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
// Log.v("INTERNET", "Available");
return true;
}
return false;
}
然后你可以这样处理
if(checkInternet(context)) {
// Internet is available
}
高级:
如果你想在互联网检查过程完成时使用监听器和回调,你只需调用接口(interface)方法。
interface InternetCheck {
void isAvailable();
void isNotAvailable();
}
public Boolean isOnline(InternetCheck internetCheck) {
try {
p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com");
int returnVal = p1.waitFor();
boolean reachable = (returnVal == 0);
if (reachable) {
new uploadDB(new uploadDB.returnResult() {
@Override
public void onFinish(String result) {
if (result.equalsIgnoreCase("success")) {
isInternetConnected = true;
internetCheck.isAvailable();
} else {
isInternetConnected = false;
internetCheck.isNotAvailable();
showdialog("No Internet Connection", "Connection to server failed.");
}
}
}).execute("ping");
} else {
isInternetConnected = false;
internetCheck.isNotAvailable();
showdialog("No Internet", "Internet connection is needed to perform certain actions.");
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public void yourButtonClickEvent() {
isOnline(new InternetCheck() {
@Override
public void isAvailable() {
// Now Internet is available
}
@Override
public void isNotAvailable() {
}
});
}
关于java - 如何在单击按钮时在一个方法中执行 2 个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54742823/