将函数移到共享函数类时如何使函数起作用?

时间:2019-01-16 07:12:35

标签: java android

我想从我的应用程序中的多个位置打开网页。当我从它所在的同一个类中调用它时,此函数可以正常工作。

public void inLineShowWebPage() {

    String url = "https://www.google.com";
    Intent i = new Intent(Intent.ACTION_VIEW);
        i.setData(Uri.parse(url));
        try {
        startActivity(i);
    } catch (Exception e) {
        Log.d ("myError", e.getMessage());
    }
}

我不想将以上代码复制到应用程序中的每个活动中,因此我设置了一个共享功能活动,如下所示。

public class SharedFunctions extends AppCompatActivity {

public void showWebPage() {

    String url = "https://www.google.com";
    Intent i = new Intent(Intent.ACTION_VIEW);
    i.setData(Uri.parse(url));
    try {
        startActivity(i);
    } catch (Exception e) {
        Log.d ("myError", e.getMessage());
    }
}
}

并这样称呼它:

SharedFunctions sf = new SharedFunctions();
sf.showWebPage();

这将导致错误消息:

myError: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference

当我进入调试模式时,我可以看到我不为空。感谢您的帮助,因为我已经尝试解决此问题大约4个小时了。

1 个答案:

答案 0 :(得分:0)

您将需要活动上下文来调用startActivity()。在调用函数时传递活动上下文,并使用活动的上下文来调用startActivity()。如下更改代码,然后尝试。

public void showWebPage(Context mContext) {

    String url = "https://www.google.com";
    Intent i = new Intent(Intent.ACTION_VIEW);
    i.setData(Uri.parse(url));
    try {
        mContext.startActivity(i);
    } catch (Exception e) {
        Log.d ("myError", e.getMessage());
    }
}

也无需从AppCompatActivity扩展您的 SharedFunction 类,删除扩展并将其声明为独立类。