网页流量不会回去(Xamarin - Android的C#) [英] Webview wont go back(Xamarin - Android C#)
问题描述
林新在这里只是为了让大家都知道。
我开始做Android的网页视图的应用程序,我想允许用户能够回到previous页,而不是alwasy走出去申请的。
每当我运行应用程序和preSS返回图标即时得到这个运行时错误。
System.NullReferenceException:对象未设置为一个
一个对象的实例
块引用>及其code的此块:
公共覆盖布尔的onkeydown(主要code键code,KeyEvent e而)
{
如果(键code ==重点code.Back&放大器;&安培; web_view.CanGoBack())//< - 这是它带来了错误的行
{
web_view.GoBack(); 返回true;
} 返回base.OnKeyDown(键code,E);
}我怀疑它的东西做的web视图。
谁能给我如何进行的一些建议?
下面是我的小项目我的源$ C $ C:
使用系统;
使用Android.App;
使用Android.OS;
使用Android.Webkit;
使用Android.Views;命名空间MyWebApp
{
[活动(标签=MyWebApp,MainLauncher = true时,图标=@绘制/图标,主题=@android:风格/ Theme.NoTitleBar)]
公共类MainActivity:活动
{
的WebView web_view; //< - 我想这可能是问题? 保护覆盖无效的OnCreate(束束)
{
base.OnCreate(包); //从主布局资源设置我们的观点
的setContentView(Resource.Layout.Main); DisplayWebpage(web_viewhttp.google.com);
}
私人的WebView DisplayWebpage(的WebView的WebView,字符串URL)
{
网页流量= FindViewById<&的WebView GT;(Resource.Id.webView); webview.Settings.JavaScriptEnabled = TRUE;
webview.LoadUrl(URL); webview.SetWebViewClient(新WebView_Client()); 返回的WebView;
}
公共类WebView_Client:WebViewClient
{
公众覆盖布尔ShouldOverrideUrlLoading(的WebView视图,字符串URL)
{
view.LoadUrl(URL); 返回true;
}
}
//返回的功能
公众覆盖布尔的onkeydown(主要code键code,KeyEvent e而)
{
如果(键code ==重点code.Back&放大器;&安培; web_view.CanGoBack())
{
web_view.GoBack(); 返回true;
} 返回base.OnKeyDown(键code,E);
}
}
}
解决方案您是不是在你的
DisplayWebpage
方法的返回分配你的WebView实例(web_view):web_view = DisplayWebpage(web_viewhttp.google.com);
然后,你应该能够:
公共覆盖布尔的onkeydown(主要code键code,KeyEvent e而)
{
如果(键code ==重点code.Back&放大器;&安培;!web_view = NULL){
尝试{
如果(web_view.CanGoBack()){
Log.Debug(计算器,允许浏览器后退);
Toast.MakeText(这一点,允许浏览器后退,ToastLength.Short).Show();
web_view.GoBack();
返回true;
}
}
赶上(例外前){
Log.Error(计算器,ex.Message);
}
}其他{
Log.Error(计算器,空的WebView ......);
}
Log.Debug(计算器,后退键封杀);
Toast.MakeText(这一点,后退键封杀,ToastLength.Short).Show();
返回false;
}Im new here just to let you all know.
I started to make a webview app for android and I wanted to allow the user to be able to go back to the previous page instead of alwasy going out of the application.
Im getting this runtime error whenever I run the app and press the back icon.
"System.NullReferenceException: Object reference not set to an instance of an object"
Its for this block of code:
public override bool OnKeyDown(Keycode keyCode, KeyEvent e) { if (keyCode == Keycode.Back && web_view.CanGoBack()) // <-- this is the line which brings up the error { web_view.GoBack(); return true; } return base.OnKeyDown(keyCode, e); }
I suspect its something to do with the WebView.
Can anyone give me some advice on how to proceed?
Below is my source code of my little project:
using System; using Android.App; using Android.OS; using Android.Webkit; using Android.Views; namespace MyWebApp { [Activity(Label = "MyWebApp", MainLauncher = true, Icon = "@drawable/icon", Theme = "@android:style/Theme.NoTitleBar")] public class MainActivity : Activity { WebView web_view; //<-- I think this might be the issue? protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); // Set our view from the "main" layout resource SetContentView(Resource.Layout.Main); DisplayWebpage(web_view, "http.google.com"); } private WebView DisplayWebpage(WebView webview, String url) { webview = FindViewById<WebView>(Resource.Id.webView); webview.Settings.JavaScriptEnabled = true; webview.LoadUrl(url); webview.SetWebViewClient(new WebView_Client()); return webview; } public class WebView_Client : WebViewClient { public override bool ShouldOverrideUrlLoading(WebView view, string url) { view.LoadUrl(url); return true; } } // BACK FUNCTIONALITY public override bool OnKeyDown(Keycode keyCode, KeyEvent e) { if (keyCode == Keycode.Back && web_view.CanGoBack()) { web_view.GoBack(); return true; } return base.OnKeyDown(keyCode, e); } } }
解决方案You are not assigning your WebView instance (web_view) in the return of your
DisplayWebpage
method:web_view = DisplayWebpage(web_view, "http.google.com");
Then you should be able to:
public override bool OnKeyDown(Keycode keyCode, KeyEvent e) { if (keyCode == Keycode.Back && web_view != null) { try { if (web_view.CanGoBack()) { Log.Debug ("StackOverflow", "Allow browser back"); Toast.MakeText (this, "Allow browser back", ToastLength.Short).Show(); web_view.GoBack (); return true; } } catch (Exception ex) { Log.Error ("StackOverflow", ex.Message); } } else { Log.Error ("StackOverflow", "Null webview..."); } Log.Debug ("StackOverflow", "Back button blocked"); Toast.MakeText (this, "Back button blocked", ToastLength.Short).Show (); return false; }
这篇关于网页流量不会回去(Xamarin - Android的C#)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!