我想从我的应用程序中的多个位置打开网页。当我从它所在的同一个类中调用它时,此函数可以正常工作。
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个小时了。
答案 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 类,删除扩展并将其声明为独立类。