网页流量不会回去(Xamarin - Android的C#) [英] Webview wont go back(Xamarin - Android C#)

查看:126
本文介绍了网页流量不会回去(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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆