Webview后退按钮导致静态错误

时间:2014-06-25 16:03:38

标签: java android webview

我正在尝试让我的webview能够在按下手机/设备上的后退按钮时返回上一页。我目前收到一个错误,上面写着"非静态"可以回去"无法从静态上下文中引用"以及"非静态"回去"不能从静态上下文中引用"。我认为这与我的后退按钮放置代码有关,但我不太确定。有什么想法吗?

   package com.test;


import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.Toast;

import com.parse.ParseInstallation;
import com.parse.ParsePush;
import com.parse.ParseQuery;
import com.parse.PushService;

public class MainActivity extends Activity implements OnClickListener {

    private Button push;

    private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {         
            Toast.makeText(getApplicationContext(), "onReceive invoked!", Toast.LENGTH_LONG).show();
        }
    };

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

        PushService.setDefaultPushCallback(this, MainActivity.class);




        WebView wv = (WebView) findViewById(R.id.webView1);
        wv.getSettings().setJavaScriptEnabled(true);
        wv.loadUrl("http://www.usa.gov/LawnBuddy/ ");
        wv.setWebViewClient(new WebViewClient());

        push = (Button)findViewById(R.id.senPushB);
        push.setOnClickListener(this);
    }
    private class Callback extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return (true);
        }
    }


    public void onBackPressed(){
        //Do the operation
        this.finish();
    };

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

        LocalBroadcastManager.getInstance(this).unregisterReceiver(mBroadcastReceiver);
    }

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

        LocalBroadcastManager.getInstance(this).registerReceiver(mBroadcastReceiver, new IntentFilter(MyCustomReceiver.intentAction));
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    @Override
    public void onClick(View v) {

        JSONObject obj;
        try {
            obj = new JSONObject();
            obj.put("alert", "hello!");
            obj.put("action", MyCustomReceiver.intentAction);
            obj.put("customdata","My message");

            ParsePush push = new ParsePush();
            ParseQuery query = ParseInstallation.getQuery();

            // Push the notification to Android users
            query.whereEqualTo("deviceType", "android");
            push.setQuery(query);
            push.setData(obj);
            push.sendInBackground(); 
        } catch (JSONException e) {

            e.printStackTrace();
        }
    }


}

3 个答案:

答案 0 :(得分:0)

我希望这段代码对你有帮助的按下按钮:在你的代码中包含以下代码:

public void onBackPressed(){
        //Do the operation     
        this.finish();
}

答案 1 :(得分:0)

  @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(myWebView != null){
            // Check if the key event was the Back button and if there's history
            if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
                myWebView.goBack();
                return true;
            }
            // If it wasn't the Back key or there's no web page history, bubble up to the default
            // system behavior (probably exit the activity)
        }
        else{
            Log.e(MainActivity.class.getSimpleName(), "myWebView is null : won't do anything");
        }
        return super.onKeyDown(keyCode, event);
    }

替换以上代码

答案 2 :(得分:0)

@Override
public void onBackPressed()
{
    if(myWebView.canGoBack()){
        myWebView.goBack();
    }else{
        super.onBackPressed();
    }
}