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