java - 如何在单击按钮时在一个方法中执行 2 个操作

标签 java android

我有一个执行 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/

相关文章:

android - MediaPlayer并不总是播放

android - 是否可以在 Android Google maps api v2 中显示/隐藏标记?

java - 默认 Android 抽屉可容纳更多 Activity

javascript - 无法从 Javascript 重新加载 Android WebView

java - 剪切 JsonStr

java - Gradle构建路径

java - Android CardView布局截图

JavaFX FXML Controller 类访问主类中的函数?

Java自定义Path2D

Java 将数据加载到 Parquet 中