[英]How do i Inherit the methods from a class and use them in another activity
我有一个LoginActivity,用于检查用户是否连接到互联网。 而且效果很好。 但是现在我感觉我的活动中充满了太多的代码,想将Internet Checker与Login 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();
}
}
在此类中,我在方法checkNet();
中的findViewById
上遇到错误checkNet();
在private boolean connected(){
。
因此,我通过在InternetChecker
类中使用extends AppCompatActivity
解决了此问题(错误( findViewbyId
消失了))。 我只是想知道这是否是正确的约定,如果不是,我应该扩展什么?
但是我的主要问题是:在我的LoginActivity中,它旨在继承InterneChecker方法:
我已经初始化了InternetChecker类:
public class LoginActivity extends AppCompatActivity {
private InternetChecker internetChecker = new InternetChecker();
然后,我尝试在LoginActivity
类中名为checkInternet
的方法中使用InternetChecker:
private void checkInternet(){
InternetChecker = new InternetChecker();
}
但是我在这条线上得到了错误表达:
InternetChecker = new InternetChecker();
所以我尝试了以下方法:
InternetChecker checkNet = new InternetChecker();
这次没有错误,但是CheckNet发出警告:从未使用变量checkNet,并且在我运行该应用程序时,该应用程序不会调用InternetChecker
方法并检查用户是否已连接到Internet。
请指导我如何继承类InternetChecker
的方法,并将其应用于LoginActivity
?
注意:“我的清单”已设置了权限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
这是基于以下答案的mySolution
我创建了一个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();
}
}
然后在BaseActivity
中扩展LoginActivity
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();
}
}
现在,让您的所有活动扩展一个BaseActivity,这将扩展AppCompatActivity,
在BaseActivity中,
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");
}
}
现在,从您的所有活动中(由于它们扩展了BaseActivity),您只需调用
if(MiscUtils.isConnectedToInternet(this)){
}else{
showNoInternetMessage(//Any view id from this activity);
}
您可以从AppCompatActivity
使InternetChecket继承,然后使您的活动从InternetChecker
继承:
public class InternetChecker 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();
}
接着:
public class LoginActivity extends InternetChecker
现在,可以在LoginActivity中使用InternetChecker中的所有方法。 而且InternetChecker可以调用findViewById
因为它从AppCompatActivity
继承了此方法。
您还可以使InternetChecker成为更常见的实用工具类,我个人建议:
public class InternetChecker{
private Context mContext;
public InternetChecker(Context context){
mContext = context;
}
private boolean connected(){
ConnectivityManager connectivityManager=(ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo !=null && activeNetworkInfo.isConnected();
}
然后,只要您想检查连通性,就可以在一个活动中进行:
InternetChecker checker = new InternetChecker(this);
if(checker.connected()){
//connected
}
您可以创建一个公共类(Common.java),而不是将其保留在活动中。 将该方法创建为静态方法。
public static boolean connected(Activity activity){
ConnectivityManager connectivityManager=(ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo !=null && activeNetworkInfo.isConnected();
}
无论何时需要此方法,都可以像下面这样调用它。
Common.connected(activity);
有两种方法1.您需要在checkNet(View view)方法中传递视图的引用并使用此代码
public class InternetChecker {
public void checkNet(View view,Activity activity) {
if (connected(activity)) {
Snackbar.make(view.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(view.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(Activity activity) {
ConnectivityManager connectivityManager = (ConnectivityManager)activity.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
}
使用界面进行交互
公共类InternetChecker {
public void checkNet(snckbarInterFace snckbarInterFace,Activity activity ) { if (connected()) { snckbarInterFace.showConnected(); } else { snckbarInterFace.showNoConnected(); } }
}
并从您的登录活动调用方法中像这样
View rootView = getWindow().getDecorView().getRootView();
new InternetChecker().checkNet(rootView);
创建一个单独的类,仅检查互联网连接。 如果您想展示小吃店,那么请参加个人活动。
互联网连接类别代码:
public class InternetConnection
{
private Context con;
private static InternetConnection ic = null;
public static synchronized InternetConnection getInstanceInternet(Context con)
{
if (ic == null)
{
ic = new InternetConnection(con);
}
return ic;
}
private InternetConnection(Context con)
{
this.con = con;
}
public boolean isNetworkAvailable()
{
ConnectivityManager connectivityManager = (ConnectivityManager) con.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
}
上述类的用法:创建该类的全局对象,并在创建活动时对其进行初始化。 然后像这样检查它:
if (internetConnection.isNetworkAvailable())
{
/// internet is avalable
}
else
{
/// internet not available
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.