2017-01-05 9 views
1

私に理解してもらえたら助けてください。私はアンドロイドスタジオを使って単純なWebViewアプリを構築しており、誰かが戻るボタンをタッチすると機能を戻るだけのオーバーライド方法onBackPressed()を持っています。残念ながら、私のアプリは "App has working working"というエラーで終了します。一方、アンドロイドスタジオにはランタイムエラーがいくつか表示されます。これは働い どちら:androidのWebViewでonBackPressedメソッドを理解する

@Override 
public void onBackPressed() 
{ 
    if (view.canGoBack()) 
    { 
     view.goBack(); 
    } else 
    { 
     //otherwise exit my app 
     super.onBackPressed(); 
    } 
} 

もこれが働いた:

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

return super.onKeyDown(keyCode, event); 
} 

私が間違っているかわからない、誰かが私のポイントをクリアしてください - :私のコードは以下の通りです。

アップデート:私はエミュレータでアプリケーションを実行するとうまくいきますが、デバイスの戻るボタンをクリックすると、以前のページに戻るはずですが、デバイスのエラーが動作しなくなります。残念ながら、appnameは停止しましたアンドロイドスタジオでの作業」とのエラーメッセージは、次のとおりです。 -

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: pk.shippingexpress.shippingexpress, PID: 1996 
       java.lang.NullPointerException 
        at pk.shippingexpress.shippingexpress.MainActivity.onBackPressed(MainActivity.java:42) 
        at android.app.Activity.onKeyUp(Activity.java:2193) 
        at android.view.KeyEvent.dispatch(KeyEvent.java:2664) 
        at android.app.Activity.dispatchKeyEvent(Activity.java:2423) 
        at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:547) 
        at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59) 
        at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:319) 
        at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1962) 
        at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3852) 
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3826) 
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399) 
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449) 
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418) 
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3525) 
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426) 
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3582) 
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399) 
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449) 
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418) 
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426) 
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399) 
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449) 
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418) 
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3558) 
        at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3718) 
        at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2010) 
        at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1704) 
        at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1695) 
        at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:1987) 
        at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141) 
        at android.os.MessageQueue.nativePollOnce(Native Method) 
        at android.os.MessageQueue.next(MessageQueue.java:138) 
        at android.os.Looper.loop(Looper.java:123) 
        at android.app.ActivityThread.main(ActivityThread.java:5017) 
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:515) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
        at dalvik.system.NativeStart.main(Native Method) 

私MainActivity.javaの完全なコードは以下の通りである: -

package pk.shippingexpress.shippingexpress; 

import android.net.Uri; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

import com.google.android.gms.appindexing.Action; 
import com.google.android.gms.appindexing.AppIndex; 
import com.google.android.gms.appindexing.Thing; 
import com.google.android.gms.common.api.GoogleApiClient; 

public class MainActivity extends AppCompatActivity { 

    public WebView view; 
    /** 
    * ATTENTION: This was auto-generated to implement the App Indexing API. 
    * See https://g.co/AppIndexing/AndroidStudio for more information. 
    */ 
    private GoogleApiClient client; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     String url = "http://easyonlineconverter.com"; 
     WebView view = (WebView) this.findViewById(R.id.express); 
     view.getSettings().setJavaScriptEnabled(true); 
     view.loadUrl(url); 
     view.setWebViewClient(new WebViewClient()); 

     // ATTENTION: This was auto-generated to implement the App Indexing API. 
     // See https://g.co/AppIndexing/AndroidStudio for more information. 
     client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); 
    } 
    @Override 
public void onBackPressed() 
{ 
    if (view.canGoBack()) 
    { 
     view.goBack(); 
    } else 

    { 
     //otherwise exit my app 
     super.onBackPressed(); 
    } 
} 


    /** 
    * ATTENTION: This was auto-generated to implement the App Indexing API. 
    * See https://g.co/AppIndexing/AndroidStudio for more information. 
    */ 
    public Action getIndexApiAction() { 
     Thing object = new Thing.Builder() 
       .setName("Main Page") // TODO: Define a title for the content shown. 
       // TODO: Make sure this auto-generated URL is correct. 
       .setUrl(Uri.parse("http://[ENTER-YOUR-URL-HERE]")) 
       .build(); 
     return new Action.Builder(Action.TYPE_VIEW) 
       .setObject(object) 
       .setActionStatus(Action.STATUS_TYPE_COMPLETED) 
       .build(); 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 

     // ATTENTION: This was auto-generated to implement the App Indexing API. 
     // See https://g.co/AppIndexing/AndroidStudio for more information. 
     client.connect(); 
     AppIndex.AppIndexApi.start(client, getIndexApiAction()); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 

     // ATTENTION: This was auto-generated to implement the App Indexing API. 
     // See https://g.co/AppIndexing/AndroidStudio for more information. 
     AppIndex.AppIndexApi.end(client, getIndexApiAction()); 
     client.disconnect(); 
    } 
} 
+0

エラー... –

+0

スタジオのエラーメッセージを表示してください。 –

+0

ここにエラーがなければ、私は言うことができます:それはあなたがそれを忘れることができるので、それはキーボード関連のため、2番目の方法は意味をなさない。最初のコードで、ビューがnullでないことを確認します。 –

答えて

0

最初に、クラス変数宣言:

public WebView view; 

をしかし、その後、あなたが意図せずにクラス変数をシャドウローカル変数を初期化:あなたはこの行を取得するときようにするため

WebView view = (WebView) this.findViewById(R.id.express); 

if (view.canGoBack()) 

viewはnullです。

view = (WebView) this.findViewById(R.id.express); 

変更他のラインは、適切な動作を取得します。

+0

Kris Larsonさんのコードが私のために働いてくれてありがとうございました。私は新しいので、物事は難しいと思う。とにかく皆様に感謝します。 –

+0

この回答がうまくいったら、それを正しいものとして受け入れてください。よろしくお願いします。 –

+0

kris larson、私に「[email protected]」という時間を与えてください。非常に明確な方法で説明しました。私はあなたの電子メールを見て満足しています。 –

0
java.lang.NullPointerException 
        at pk.shippingexpress.shippingexpress.MainActivity.onBackPressed(MainActivity.java:42) 

この行の内容をもう一度確認してください。私はまったく同じコードを使用しており、問題なく動作します。

@Override 
public void onBackPressed() { 
    if (webView.canGoBack()) { 
     webView.goBack(); 
    } else { 
     super.onBackPressed(); 
    } 
} 
関連する問題