метод сбоя приложения onKeyDown - PullRequest
2 голосов
/ 25 октября 2011

У меня есть следующий код, который работает, но когда я нажимаю кнопку аппаратного возврата, приложение вылетает,

package com.fnesse.tmpmobile;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

@SuppressWarnings("unused")
public class TmpmobileActivity extends Activity 
{
WebView webView;
final Activity activity = this;    

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
        setContentView(R.layout.main);
        WebView webView = (WebView) findViewById(R.id.webview);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setBackgroundColor(0x00000000);
        webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);

        webView.setWebChromeClient(new WebChromeClient() {
        public void onProgressChanged(WebView view, int progress)
        {
            activity.setTitle("Loading...");
            activity.setProgress(progress * 100);

            if(progress == 100)
                activity.setTitle(R.string.app_name);
        }
        });

        webView.setWebViewClient(new WebViewClient() {

        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
        {
            //Error Code Here
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url)
        {
            view.loadUrl(url);
            return true;
        }

    });

    webView.loadUrl("http://www.themorningtonpeninsula.com");
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
        webView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
    }
}

Я нашел где-то, что мне нужно было добавить,

WebView webView;

Над методом onCeate, который позволил разрешить webView. Так что теперь я не получаю никаких ошибок, но он вылетает, и приложение запускается на моем телефоне, но вылетает, когда я нажимаю кнопку аппаратного возврата.

Кто-нибудь знает, почему это происходит?

Приветствия

Mike.

Ответы [ 2 ]

5 голосов
/ 25 октября 2011

Я попытаюсь сделать моего волшебного гостя в сообщении об ошибке.Я думаю, эта ошибка вызвана способом инициализации переменной webView.Вы видите, на уровне класса, вы объявляете:

WebView webView;

А затем, на onCreate() вы инициализируете webView, а также повторно объявляете его снова:

WebView webView = (WebView) findViewById(R.id.webview);

Но этошаг redeclare привел к инициализации класса webView.

Чтобы исправить это, попробуйте изменить эту строку:

WebView webView = (WebView) findViewById(R.id.webview);

Into:

webView = (WebView) findViewById(R.id.webview);

И теперь у вас должен быть инициализирован и готов для уровня класса webViewиспользуйте любой другой метод.

Вот несколько ресурсов, объясняющих область действия переменной Java:

0 голосов
/ 25 октября 2011

Вы создаете новое веб-представление в своем методе onCreate () вместо поля «Класс». Изменение

WebView webView = (WebView) findViewById(R.id.webview);

в

webView = (WebView) findViewById(R.id.webview);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...