1

私は多くのことを試しましたが、Androidアプリでクラッシュエラーが発生し続けています。私のアプリは、webview関数を使用したシンプルなwebwrapperアプリです。基本的に、私はモバイルサイトを持つウェブサイトを表示するウェブビューを持っています。私がやろうとしているのは、

  1. 戻るボタンを押すと、ユーザーは前の画面に戻ります
  2. アプリの[戻る]ボタン(レイアウトに配置)も、ユーザーを前の画面に移動します。
  3. また、電話のホームボタンをホーム画面に戻し、アプリを完全に終了させたいです。
  4. 最後に、モバイルアプリには、アプリ内に留まらずにブラウザーにアクセスする必要のある外部リンクがあります(例:フルサイトにアクセス)。

以下は私のコードです。1〜4の質問のいずれかのヘルプが役に立ちます!:-)!私のXMLを見る必要がある場合は、遠慮なく質問してください。

package com.example.envision;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.DownloadListener;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.ProgressBar;

public class Envision extends Activity {
/** back button functionality NOT WORKING CAUSES A CRASH
WebView webview;
@Override
   public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(event.getAction() == KeyEvent.ACTION_DOWN) {
            switch(keyCode)
            {
            case KeyEvent.KEYCODE_BACK:
                if(webview.canGoBack() == true){
                    webview.goBack();
                } else {
                    finish();
                }
                return true;
            }
        }
        return super.onKeyDown(keyCode, event);
    } */

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_envision);

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

WebSettings websettings = webview.getSettings();

websettings.setJavaScriptEnabled(true);
websettings.setSaveFormData(false);
websettings.setSavePassword(false);

webview.loadUrl("http://envisionfinancial.ca/m/");
webview.setHorizontalScrollBarEnabled(false);
webview.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
webview.setBackgroundColor(128);

webview.setWebViewClient(new EnvisionWebViewClient());

webview.setDownloadListener(new DownloadListener() {
    public void onDownloadStart(String url, String userAgent,
            String contentDisposition, String mimetype,
            long contentLength) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse(url));
        startActivity(intent);
        }


});

}

public void visible(){

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

ImageView logo = (ImageView) findViewById(R.id.imageView1);

ProgressBar bar = (ProgressBar) findViewById(R.id.progressBar1);

webview.setVisibility(10);

logo.setVisibility(0);

bar.setVisibility(0);

}

public void unvisible(){

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

ImageView logo = (ImageView) findViewById(R.id.imageView1);

ProgressBar bar = (ProgressBar) findViewById(R.id.progressBar1);

webview.setVisibility(0);

logo.setVisibility(10);

bar.setVisibility(10);

}


private class EnvisionWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView webview, String url){
    webview.loadUrl(url);
    return true;
}


@Override
public void onReceivedError(WebView view, int errorCode,
    String description, String failingUrl) {
// TODO Auto-generated method stub
view.loadUrl("http://envisionfinancial.ca/m/");
}

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {

visible();

}

@Override
public void onPageFinished(WebView view, String url) {

unvisible();

}

}
/** exits the app?? review */
public void finishActivity(View v) {
finish();

}
}
4

2 に答える 2

0

これを参照してください:http: //developer.android.com/guide/webapps/webview.html

スクロールしてBinding JavaScript code to Android code

http://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object、java.lang.String)

于 2012-11-18T19:57:00.570 に答える
0

onKeyDownでNullPointerExceptionが発生していますか?これは、WebViewをインスタンス変数に割り当てないためです。

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

バック機能は次のように実装できます。

public void onBackPressed() {
    if (webview.canGoBack())
        webview.goBack();
    else
        super.onBackPressed();
}
于 2012-11-18T20:05:37.523 に答える