我在实现从shouldOverrideUrlLoading
内部加载一个意图时遇到了一个很大的问题。
我认为这与我构建应用程序的方式有关。
这是我的代码: 的 VariablesStorage.class
public class VariablesStorage
{
private static VariablesStorage instance;
public static Context webViewContext;
public WebView webView;
public static void initInstance()
{
if (instance == null)
{
// Create the instance
instance = new VariablesStorage();
}
}
public static VariablesStorage getInstance()
{
// Return the instance
return instance;
}
private VariablesStorage()
{
}
public void loadWebView() {
webView.getSettings().setJavaScriptEnabled(true);
if (isOnline())
{
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("inapp://")) {
Intent intent = new Intent(this,profilepictureview.class);
intent.putExtra("img",Uri.parse(url).getHost().toString());
startActivity(intent);
}else
{
view.getContext().startActivity(
new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
}
return true;
}
@Override
public void onReceivedError( WebView view, int errorCode, String description, String failingUrl)
{
}
@Override
public void onPageFinished(WebView view, String url) {
if(mProgress.isShowing()) {
mProgress.dismiss();
}
}
});
webView.loadUrl(Url);
}else
{
webView.loadData(customHtml, "text/html;charset=utf-8", "UTF-8");
}
}
}
和我的网络视图活动,我致电VariablesStorage.getInstance().loadWebView();
的 WebViewActivity.class
public class WebViewActivity extends Activity {
SharedPreferences pref;
TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webviewtab);
VariablesStorage.getInstance().webViewContext = this;
VariablesStorage.getInstance().webView = (WebView) findViewById(R.id.webView);
VariablesStorage.getInstance().loadWebView();
}
所以当我在shouldOverrideUrlLoading
Intent intent = new Intent(this,profilepictureview.class);
intent.putExtra("img",Uri.parse(url).getHost().toString());
startActivity(intent);
我收到此错误:
The constructor Intent(new WebViewClient(){}, Class<profilepictureview>) is undefined
实施这个的任何帮助? 感谢。
答案 0 :(得分:2)
正如错误所述,Intent
没有一个构造函数,它将WebViewClient(){}
作为参数,这是this
在这种情况下所指的参数。 See Intent Constructors
你可能想要的是
Intent intent = new Intent(webViewContext,profilepictureview.class);
但您需要先初始化webViewContext
。
修改强>
startActivity
也需要Context
。试试这个
webViewContext.startActivity(intent);
答案 1 :(得分:0)
保持对活动上下文的静态引用会导致问题。所有视图(包括WebView)都有getContext(),因此在创建Intent时使用view.getContext()而不是'this'或'webViewContext'。
此外,您正在尝试启动名为“profilepictureview”的活动,这听起来更像是视图而不是活动?