我如何从类继承方法并在另一个活动中使用它们

时间:2018-04-13 10:39:17

标签: java android

我有一个LoginActivity,用于检查用户是否已连接到互联网。而且效果很好。但现在我觉得我的活动充满了太多的代码,并希望将互联网检查器与登录活动分开,但我正在努力执行方法调用。

这是我尝试过的:

InternetChecker类:​​

findViewById

在此课程中,我在checkNet();的方法private boolean connected(){中的extends AppCompatActivity收到错误。

所以我在InternetChecker课程中使用findViewbyId解决了这个问题,错误(public class LoginActivity extends AppCompatActivity { private InternetChecker internetChecker = new InternetChecker(); 消失了)。 我只是想知道这是否是正确的约定,如果不是我应该扩展什么?

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

我已经初始化了InternetChecker类:​​

checkInternet

然后我尝试在名为LoginActivity的方法中使用InternetChecker,该方法位于我的private void checkInternet(){ InternetChecker = new InternetChecker(); } 类中:

InternetChecker = new InternetChecker();

但是我得到了这一行所期望的错误表达式:

InternetChecker checkNet = new InternetChecker();

所以我尝试了以下内容:

InternetChecker

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

请指导我如何继承课程LoginActivity中的方法,并将其应用到<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

注意:我的清单已设置权限:

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();
    }
}

这是基于以下答案组合的mySolution

我创建了一个BaseActivity:

BaseActivity

然后扩展了LoginActivity

中的public class LoginActivity extends BaseActivity {
LoginActivity

然后我在checkNet内创建了一个调用private void checkInternet(){ checkNet(); }

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

    checkInternet();

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

setup(data, namespaces, eventHandler) {
    $(this).resize(eventHandler);
});

但如果有更好的方法比我在这里做的更好,我会很感激答案,所以我可以标记为正确的答案。

5 个答案:

答案 0 :(得分:2)

正确的方法是制作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);
}

答案 1 :(得分:1)

您可以从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
}

答案 2 :(得分:1)

您可以创建一个公共类(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);

答案 3 :(得分:1)

有两种方法 1.您需要在checkNet(查看视图)方法中传递您的视图参考并使用此代码

   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();
    }
}
  1. 使用界面进行互动

    公共类InternetChecker {

    public void checkNet(snckbarInterFace snckbarInterFace,Activity activity ) {
    
    
        if (connected()) {
            snckbarInterFace.showConnected();
    
        } else {
            snckbarInterFace.showNoConnected();
        }
    
    }
    

    }

  2. 并从您的登录活动调用方法

      View rootView = getWindow().getDecorView().getRootView();
        new InternetChecker().checkNet(rootView);
    

答案 4 :(得分:1)

创建一个单独的类,只检查互联网连接。如果你想展示小吃店,那么就可以在个人活动中展示。

互联网连接类代码:

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
}