[英]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.