質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.11%

自作インターネットアプリが「停止しました」と表示されて起動できない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 428

kokarare

score 11

ご指摘お願いします。

package com.android.internetbrowser;

import android.app.AlertDialog;
import android.app.DownloadManager;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.SpannableStringBuilder;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.CookieManager;
import android.webkit.DownloadListener;
import android.webkit.URLUtil;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    WebView webView = findViewById(R.id.webview);
    final private int INTENT_CODE = 101;
    private ValueCallback<Uri> mUploadMessage;
    Button go = findViewById(R.id.go);
    Button back = findViewById(R.id.back);
    EditText urlbar = findViewById(R.id.urlbar);
    ProgressBar progressBar = findViewById(R.id.progressBar);


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (savedInstanceState == null) {
            webView.loadUrl("https://www.google.com");
        }
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setUseWideViewPort(true);
        webView.getSettings().setLoadWithOverviewMode(true);
        webView.setVerticalScrollbarOverlay(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setDomStorageEnabled(true);
        webView.setWebChromeClient(new WebChromeClient() {
            // /Android 4.1以上
            public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
                mUploadMessage = uploadMsg;
                Intent i = new Intent(Intent.ACTION_GET_CONTENT);
                i.addCategory(Intent.CATEGORY_OPENABLE);
                i.setType("image/*");
                startActivityForResult(Intent.createChooser(i, "画像選択"), INTENT_CODE);
            }
            public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
                mUploadMessage = uploadMsg;
                Intent i = new Intent(Intent.ACTION_GET_CONTENT);
                i.addCategory(Intent.CATEGORY_OPENABLE);
                i.setType("image/*");
                startActivityForResult(Intent.createChooser(i, "画像選択"), INTENT_CODE);
            }
            // Android 3.0未満
            public void openFileChooser(ValueCallback<Uri> uploadMsg) {
                openFileChooser(uploadMsg, "", "");
            }
        });
        webView.setDownloadListener(new DownloadListener() {

            @Override
            public void onDownloadStart(String url, String userAgent,
                                        String contentDisposition, String mimetype,
                                        long contentLength) {
                DownloadManager.Request request = new DownloadManager.Request(
                        Uri.parse(url));

                request.allowScanningByMediaScanner();
                request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); //Notify client once download is completed!
                request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "Name of your downloadble file goes here, example: Mathematics II ");
                DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
                dm.enqueue(request);
                Toast.makeText(getApplicationContext(), "Downloading File", //To notify the Client that the file is being downloaded
                        Toast.LENGTH_LONG).show();

            }
        });
        go.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                CharSequence url = urlbar.getText();
                if (url==""){
                }else{
                    webView.loadUrl(url.toString());
                }
            }
        });
        back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                        webView.goBack();
            }
        });
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public void onPageFinished(WebView view,String url) {
                url = webView.getUrl();
                urlbar.setText(url, TextView.BufferType.NORMAL);
        }
        });
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_BACK) {
            if (webView.canGoBack()) {
                webView.goBack();
            } else {
                AlertDialog.Builder alertDialog=new AlertDialog.Builder(this);

                // ダイアログの設定
                alertDialog.setTitle("確認");      //タイトル設定
                alertDialog.setMessage("終了しますか?");  //内容(メッセージ)設定

                // OK(肯定的な)ボタンの設定
                alertDialog.setPositiveButton("はい", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        finishAndRemoveTask();
                    }
                });

                alertDialog.setNeutralButton("いいえ", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                    }
                });


                alertDialog.show();

            }

            return true;
        }

        return super.onKeyDown(keyCode, event);
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        webView.saveState(outState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        webView.restoreState(savedInstanceState);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        if (requestCode == INTENT_CODE) {
            if (null == mUploadMessage) return;

            Uri result = (intent == null || resultCode != RESULT_OK) ? null : intent.getData();
            mUploadMessage.onReceiveValue(result);
            mUploadMessage = null;
        }
    }
    private class MyWebViewClient extends WebViewClient {
        @Override
        public void onPageStarted(WebView view, String url, android.graphics.Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            progressBar.setVisibility(View.VISIBLE);    // 読み込み開始時にプログレスバー表示
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            progressBar.setVisibility(View.GONE);       // 読み込み完了時にプログレスバー非表示
        }
    }

    protected class MyWebChromeClient extends WebChromeClient {
        public void onProgressChanged(WebView view, int progress) {
            progressBar.setProgress(progress);          // プログレスバーの進捗を更新
        }
    }
}
2019-02-09 10:40:20.272 604-617/system_process D/Sensors: batch handle 6, but there is no batch sensor in genymotion
2019-02-09 10:40:20.279 604-827/system_process D/Sensors: batch handle 1, but there is no batch sensor in genymotion
2019-02-09 10:40:20.282 604-649/system_process D/PressureSensor: pressure event 1013.000000
2019-02-09 10:40:21.273 604-670/system_process W/WifiMode: WiredSSID, Invalid SupportedRates!!!
2019-02-09 10:40:21.273 604-672/system_process W/WifiMode: WiredSSID, Invalid SupportedRates!!!
2019-02-09 10:40:21.274 604-670/system_process W/WifiMode: WiredSSID, Invalid SupportedRates!!!
2019-02-09 10:40:21.777 604-2123/system_process D/Sensors: batch handle 1, but there is no batch sensor in genymotion
2019-02-09 10:41:43.460 604-618/system_process D/Sensors: batch handle 6, but there is no batch sensor in genymotion
2019-02-09 10:41:43.470 604-649/system_process D/PressureSensor: pressure event 1013.000000


  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kokarare

    2019/02/09 10:46

    記載しました。
    回答お願いします。

    キャンセル

  • yukke_

    2019/02/09 13:21

    ログが全然アプリと関係ないようですが

    キャンセル

  • 退会済みユーザー

    2019/02/09 14:05

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 1

checkベストアンサー

0

public class MainActivity extends AppCompatActivity {

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

この時点ですでにアウトです。Activity上に描画されたコンポーネントのオブジェクトを参照するのは、onCreate()メソッドが開始されたの中でsetContentView()メソッドを呼んで、コンポーネントがActivityに描画された以降である必要があります。フィールドの初期化はonCreate()以前の処理になりますから、ここで変数webViewに入るのはnullです。これを参照した処理をしたらNullPointerExceptionでアプリが落ちます。

それ以外にも問題山積みのようですね。いきなり応用アプリを開発するのではなく、入門の習得から始めるべきだと思います。


(22:17 追記)
回答に一部誤りがあったので修正しました。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/09 18:39

    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.11%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る