java - 如何从类继承方法并在另一个 Activity 中使用它们

标签 java android

我有一个 LoginActivity 来检查用户是否连接到互联网。而且效果很好。但现在我觉得我的 Activity 充满了太多代码,并且想将互联网检查器与登录 Activity 分开,但我很难执行方法调用。

这是我尝试过的:

InternetChecker 类:

public class InternetChecker  {


public void checkNet(){

        if(connected()){
            Snackbar.make(findViewById(R.id.activity_login), "Your Internet Connection is Great",
                    Snackbar.LENGTH_LONG)
                    .setAction("Action", null).setActionTextColor(Color.RED).show();
            Log.i("TRUE","User is connected");

        }else{
            Snackbar.make(findViewById(R.id.activity_login), "Your You are not Connected to the internet",
                    Snackbar.LENGTH_LONG)
                    .setAction("Action", null).setActionTextColor(Color.RED).show();
            Log.i("TRUE","User is not connected");
        }

    }

    private boolean connected(){
        ConnectivityManager connectivityManager=(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo !=null && activeNetworkInfo.isConnected();
    }
}

在此类中,我在 private booleanconnected(){checkNet(); 方法中的 findViewById 上收到错误。

因此,我通过在 InternetChecker 类中使用 extends AppCompatActivity 解决了这个问题,错误(findViewbyId 消失了)。 我只是想知道这是否是正确的约定,如果不是,我应该扩展什么?

但我的主要问题是: 在我的 LoginActivity 中,它继承了 InterneChecker 方法:

我已经初始化了 InternetChecker 类:

public class LoginActivity extends AppCompatActivity {

        private InternetChecker internetChecker = new InternetChecker();

然后我尝试在名为 checkInternet 的方法中使用 InternetChecker,该方法位于我的 LoginActivity 类中:

private void checkInternet(){
            InternetChecker = new InternetChecker();
        }

但是我在这一行收到了预期的错误表达式:

InternetChecker = new InternetChecker();

所以我尝试了以下方法:

InternetChecker checkNet = new InternetChecker();

这次没有错误,但 CheckNet 有一个警告:变量 checkNet 从未使用过,当我运行应用程序时,应用程序不会调用 InternetChecker 方法并检查用户是否连接到互联网。

请指导我如何继承InternetChecker类中的方法,并将它们应用到LoginActivity

注意:我的 list 已设置权限:

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

这是基于以下答案组合的我的解决方案

我创建了一个 BaseActivity:

public class BaseActivity extends AppCompatActivity {
    public void checkNet(){

            if(connected()){
                Snackbar.make(findViewById(R.id.activity_login), "Your Internet Connection is Great",
                        Snackbar.LENGTH_LONG)
                        .setAction("Action", null).setActionTextColor(Color.RED).show();
                Log.i("TRUE","User is connected");

            }else{
                Snackbar.make(findViewById(R.id.activity_login), "Your You are not Connected to the internet",
                        Snackbar.LENGTH_LONG)
                        .setAction("Action", null).setActionTextColor(Color.RED).show();
                Log.i("TRUE","User is not connected");
            }
        }
    private boolean connected(){
        ConnectivityManager connectivityManager=(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo !=null && activeNetworkInfo.isConnected();
    }
}

然后在LoginActivity中扩展了BaseActivity

public class LoginActivity extends BaseActivity {

然后,我在 LoginActivity 中创建了一个调用 checkNet 的方法:

private void checkInternet(){
    checkNet();
}

然后在我的LoginActivity的onCreate中调用这个方法:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    checkInternet();

但是,如果有比我在这里所做的更好的方法,我将不胜感激,以便我可以将其标记为正确答案。

最佳答案

正确的方法是创建一个 MiscUtils 类

public class MiscUtils{
public static isConnected(Context context){
ConnectivityManager connectivityManager=(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo !=null && activeNetworkInfo.isConnected();
}
}

现在让您的所有 Activity 扩展 BaseActivity,这将扩展 AppCompatActivity,

在基本 Activity 中,

public class BaseActivity extends AppCompatActivity{

    public void showNoInternetMessage(View view){
     Snackbar.make(view, "Your You are not Connected to the internet",
                        Snackbar.LENGTH_LONG)
                        .setAction("Action", null).setActionTextColor(Color.RED).show();
                Log.i("TRUE","User is not connected");
    }
    }

现在,从您的所有 Activity 中[因为它们扩展了 BaseActivity],您只需调用

if(MiscUtils.isConnectedToInternet(this)){
}else{
showNoInternetMessage(//Any view id from this activity);
}

关于java - 如何从类继承方法并在另一个 Activity 中使用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49815080/

相关文章:

java - 从网站上的 PHP 脚本运行 Java 类文件

android - 为什么在每次重复按键后调用 android KeyboardView.OnKeyboardActionListener.onRelease()?

android - 无法将内容从 Android 应用分享到 Facebook

java - ViewPager : OutOfResourcesException locking surface

java - 在 Android Beta 0.9 中使用 ItemizedOverlay 和 OverlayItem

java - 点对点聊天无法接收/发送消息

java - HttpSession getAttribute() 返回 null

android - 如何使用 CookieManager 删除特定域的 cookie?

java - 找不到 com.android.tools.build :gradle:4. 3.3

Java丢失异常