JusticeBrain  ~jusys2-13bpowerの日記~

私の思考。感じたことを思いのままに。荒いですが効果てきな文章をどんどん出せるようがんばります。システムエンジニア SEの考え方!成長する手段を簡単に!リーダーマネージメントについての記事。また、人の言葉や、なんでも関数シリーズやおすすめドラマ 多岐にわたって私のすべてをさらけ出していければいいと思います。よかったら、アマゾンクリックして!いいものがあったら買っちゃおう! よくなかったら買うのはやめよう!

『アプリ開発』[Android]-[WebView] 新規プロジェクトからWebViewの構成を理解しよう! 

 

 


「WebView」まずやります。
なんだ Web View って?

 

私のようにAndroid未経験者は聞いたことない名前です。

正しい表現かわかりませんが基本部品の名前は「~View」という名前がついています。

 

「~View」は、基本部品で「WebView]はその中の一つ

 

これからいくつかのViewの基本部品を覚えていく感じなります。

 

VBとかやったことある人は、左側に出てくる「ボタン」や「テキスト」や「ラベル」

みたいなものと思ってもらってよいかと思います。

◇部品名 「WebView」

 

◆簡単な機能説明

  URLを指定してAndroidアプリ上で表示操作できる

 ブラウザで表示されるものをアプリ内に表示

◆利用例

    Instagram のページを表示

    Facebook ページを表示

    グルメサイト ページを表示

    ブログサイト ページを表示

 

◆注意点

・注意点①

表示元の更新やURL変更にアプリの修正が必要

 

・注意点②

自身のアプリが有償アプリの場合は注意  

無料公開されているURLを有償アプリ内に埋め込むことはおそらくなんらかの問題があると思います。

企業向けアプリに他のURLの使用をしたい場合は、URL公開もとに使用して問題ないかの確認のメールを投げておくだけでも問題回避はできると思います。仮に返事がなかったとしたら、確認を取ろうとしたという釈明にはなるので確認取れるのがベストですが、自分のアプリの機能としてほしいのであればネゴっときましょう。

 

じゃ開始!とりあえずサンプルプログラム作っていきましょう。

AndroidStudioを起動しましょう。

安心してください。起動からやりますよ!

よくある説明サイトはこのあたりはしょっちゃいますよね。

基本がわからない人しか見ないのにそこ抜けテルというのはちょっと多いです。

技術系は本当に多くてその中間を理解するのに苦労しますよね。

なので毎回同じ構成となるかもしれませんが、

起動から説明していきますね。

安心してください。起動からですよ!

 

Android Studio」起動しましょう。

 

「メニューバー」が表示されるとこまで行きましょう。

初心者もみてるかもしれませんので、

下の図で「ファイル」~「ヘルプ」が表示されいるとこ!

これメニューバーっていうです。

今後も操作で「メニューバー」てでてきます。

「メニューバー」ってどこだよってならないでね。

f:id:jusys2-13bpower:20200330090017p:plain

 

それでは、

①「メニューバー」から「ファイル」を選び「新規プロジェクト」を選びましょう

新規プロジェクトの元はサンプルなんで「空のアクティビティー」開きましょう。

理由は前回いいましたね。

ここで他の選ぶとこのページの以降の説明と部品が違いすぎてちんぷんかんぷんなりますね。

※注意!初心者選ぶな危険!

上級者自由にすきなのどうぞ!そもそも上級者はみないか・・・

f:id:jusys2-13bpower:20200330090536p:plain

選んだら次に

 

※ここ重要です。

あなたが作成するアプリの基本となります。

ここを後で直すのは初心者は苦労するとおもいます。参考書で簡単に何もしなくて次にとか

やたら細かく説明が入りすぎてちんぷんかんぷんになります。一つ一つしっかり覚えましょ。

 

 

アプリの基本情報を設定※おぼえて

ここではアプリの基本情報をあなたが設定するので

その構成や影響箇所を理解する第一歩です。

だからといってここで細かな説明はしませんのでご安心を!

 

基本情報とはアプリの名前や保存先などです。

 

設定を理解する必要があるのが

以下の図の赤枠部分です。

f:id:jusys2-13bpower:20200330091042p:plain

 

  • 名前
  • パッケージ名
  • 保存ローケーション
  • 言語
  • 最小APIレベル
  • このプロジェクトはinstant appをサポートする

 

 

名前

  このアプリの名前です。

  日本語は設定できません。

  パッケージ名の一部や保存ロケーションの一部

  につかわれます。

 

パッケージ名

  android開発の用語としておぼえてほしいです。

  「パッケージの場所」とか「パッケージ」のなど言い回しで言われるかもしれません。

  とても重要です。

  こちらは次のローケーションと関係しているので合わせてそこで説明しますね。

 

保存ロケーション

  言葉はむずかしいですが、

  あなたの作成したアプリプログラムや部品のパソコン内の保存先です。

  実際にエクスプローラーで開くとこんな感じ。

 

f:id:jusys2-13bpower:20200330210015p:plain

 

MainActivityは、のちほど説明しますがその先頭行に先ほどパッケージ名が指定されていますね。

細かいルールなどはまだ説明できませんがこの部分に関係すると思ってください。

 

f:id:jusys2-13bpower:20200330211115p:plain

 

先ほど保存ロケーションでプロジェクトフォルダの場所があったかと思いますが、

その中にcom.example.myapplicationという場所があります。

上図の[java]-[com.example.myapplication]を選択し右クリックしたメニューから

エクスプローラーで表示」を選ぶとエクスプローラが開きます。

f:id:jusys2-13bpower:20200330212005p:plain

すると保存ロケーション配下にありますね。

com.example.myapplication  → javacomexamplemyapplication

f:id:jusys2-13bpower:20200330212226p:plain


わたしも未熟で細かいところまでは説明できませんが、

プロジェクト配下に作成した部品などはこのcom.example.myapplicationで参照できます。

 

応用の話ですが、応用はいいよという人は読み飛ばしてください。

下図は私がいま作成しているアプリですが、

応用例)パッケージの配下にcommonという共通のフォルダを用意して

CutomToastというプログラムを配置しています。

右の方ではあるプログラム内でimportで参照してますね。

役割や雰囲気だけ感じとれればいつかつながると思います。

 

f:id:jusys2-13bpower:20200330212947p:plain

 

  • 言語 

   IT技術者はいわなくてもわかりますが

   言語とは、機械と会話する言葉すなわち

   プログラムの種類ですな。 

            開発の定番java 世界のITをつかさどるGOOGLEが採用したkotlin

   私の場合は、JAVAを勉強したかったのでJAVAにしました。

   

   どちらがいいか?今のところ情報多い方が開発しやすいのでjavaにしておいてよいでしょう。

 

   余談ですがこのAndroidの開発、開発環境が難しいことから経験していれば

   多くの現場で役立つスキルが身につくと考えます。

   初心者にはとっつきにくいですがじっくりやれば最短でいろんな知識が身につくように思います。

   しかしながら、私の若い頃にくらべこんなものが無料で好きなだけ使える今の世の中は非常にいいですね。

     

  • 最小APIレベル

    こちらは重要な要素になります。

   すこし前回でてきましたが、Androidには甘い名前のバージョン名があります。

   今は、最新10で、主流は7~9といったところでしょうか。

 

   これはなんなのかシンプルにいうとあなたのアプリ

   どのバージョンを保証しますか?というもの。

   とりあえずわからない人はそのままで作成するのがよいかと思います。

   

   ちなみにタブレットはかなりバージョンは遅れている場合が多く

   バージョン4などがあるため、バージョン4とする場合もあるかも。

   この辺りは詳しくないので、おいおい理解が深まってきたら

   情報を整理していきます。

   

   私も玄人ではないので、

      タブレットで動かしたいかもという人は4

      そんな古いのいいよという人は7

      くれぐれも最新にしとけばいいはAndoroid開発においては

      やめておいた方がいいと思います。

      なにも知らなくやった時に何もかもサポートしてなくて

      大変苦労しました。

 

   余談ですが、スマホのアンドロイドOSのバージョンは

   Google系のNexesやPixelなどは優先的に提供されます。

   googleで開発してるから当然といえば当然、

   その他携帯メーカー系は1世代遅れの安定バージョンのOSを最新の

   スマホにいれてくる傾向ですね。

  

  • このプロジェクトはinstant appをサポートする

ですね。こちらはしらべたですが起動したまま触らないほうがいいです。アプリ開発の特殊な使い方をサポートしますか?みたいなものらしいです。

理解できたところで展開しますね。

 

全てなんとなく理解したら「完了」を押して下さい。新規にAndroidプロジェクトが起動します。

 

先ほどもでてきましたがこんな感じでしょうか。

f:id:jusys2-13bpower:20200330091716p:plain

 

細かな画面の配置や操作を説明を切り出したら切りがありません。

 

今回のテーマは[WebView]を構成するメインテーマのなかAndroidの基本構成を理解するが目的です。

 

[WebView]を構成する

Androidの基本構成を理解する

 

この知識必ずもって帰って下さい。

 

Androidにはキープレーイヤーいます。

まずそのキープレイヤーを覚えていきましょう。

 

[AndroidManifest.xml]

[MainActivity.java]

[activity_main.xml]

 

以上の3つで今回は必ずこの3人のキープレイヤーの存在だけでも知ってください。

このフィールドのどこにいますかね?

f:id:jusys2-13bpower:20200330091834p:plain

 [MainActivity.java] と [activity_main.xml]の役割と関係性を理解する

 

 [MainActivity.java]

    画面の動作をJavaプログラムで書きます。

     [activity_main.xml]

   画面のデザインをXML記法で書きます。

 

今回の[WebView]の構築にそってやる事を整理します。

①    [activity_main.xml]に[WebView]をデザインする。(定義する)

 

② [WebView]に名前をつける。(定義する)

 

③ [MainActivity.java]で②で名前をつけたので

  その名前で使うよって書きます。(宣言する)

 

④ [WebView]が設定できるメニューの中から

  必要な設定を書きます。(設定する)

  開きたいWEBサイトのURLを設定します。

以上

 ①~④なんどか読みイメージしてください。

なんなら紙を用意して書いてみましょう。

次に図にしてみましよう。

 

 

 

こんな関じですかね。

構成をイメージして開発することは非常に重要です。

エンジニアのポイント

手より先に頭を動きましょう!

イメージできたらコーディング開始!

 

f:id:jusys2-13bpower:20200401005541p:plain

 

①    [activity_main.xml]に[WebView]をデザインする。(定義する) 

まずは、先ほど場所を理解したactivity_main.xmlを開きます。

-場所は[app]-[res]-[layout]というフォルダにあります。

はーいポイント

画面をデザインするXML[res][layout]にありますよ。

おぼえました!おぼえてください。

f:id:jusys2-13bpower:20200331020040p:plain

まずは、よくわからないと思いますが

[TextView]のがありますね。細かいのは抜きにして

android:text="Hellow World!"って書いてますね。

空のテンプレートは定番のハローワールドになっていますね。

必要なければ

<TextView>~</TextView>まで削除してください。

そんなの書いてないってそうですね。

xmlというのは<A> ~</A>      <B>~</B>という書き方をします。

<A>   .............................................     </A>     

Aの始まり  Aの中身    Aの終わり 

 

ちなみに<A></A>は省略できます。

<A     ..........................................  />

Aの始まり Aの中身    Aの終わり

XMLの書くルールが少しわかったでしょうか。

時期に慣れてくると思います。

このXMLはデータを表すのが得意な記述です。

詳しく知りたい人はネットXMLと調べてみてください。

特に難しくないです。この記述方法に似ていますがHTMLのタグも

似たような記述ですね。

<HTML>~</HTML><TD>~</TD>など HTMLとXMLは言葉は似ていますが、

親子?兄弟?みたいものですが、全く用途は違います。

下の画面AndroidStudioでは画面を下のようなものでレイアウトを作成することが

できるのですが、ExcelやWordとは違いかなりちんぷんかんぷで慣れるには

時間がかかります。わたしもまだうまく使えないです。

この画面はレイアウトのXMLを開くと下の方に[テキスト]と[デザイン]のタブが

でてきます下の画面は[デザイン]を選択したときです。

今回はここの操作は割愛します。今度別記事で調べて公開します。

f:id:jusys2-13bpower:20200331015947p:plain

 

 では[テキスト]のタブを開きましょう。

 

[TextView]がありますが後程[WebView]と比較するためにいったん残しておきます。

[TextView]の上でも下でもいいのです。

<  ←ここか

<TextView  ~ />

< ←ここで下のとおり<を入力するとレイアウトできる候補がでてきます。

ここに出てくるものは、今後Androidアプリを構成するなかで利用します。

今回は[WebView]なので[WebView]を選びましょう。

f:id:jusys2-13bpower:20200331020216p:plain

 

以下のようにTextViewを参考に入力してみましょうか。

レイアウトの説明は、今説明してもわからないのでいったん割愛するとして

中身は[TextView]と同じような記述をしていきましょ。

書き終えたら<TextView~/>を削除してもらっても構いません。

f:id:jusys2-13bpower:20200331020439p:plain

 少しだけ記述の説明します

先ほど説明したとおりでxmlの開始と終了の記述ルールからいくと

[WebView]のレイアウトの開始と終了  → <WebView    ~ />

                                                                        もしくは<WebView>  ~</WebView>

じゃ中身

まずこの二つ

andorid:で始まるのはお約束でandroid:というと候補がでてくる。

青のところの意味は何となくわかりますよね。

レイアウトの横幅とレイアウトの高さです。

みなれないものが書いてありますね。

レイアウトを覚えるまではmatch_parentとwrap_contentを設定するのですが、

意味はなんとなくわかりますか?

 

android:layout_width="match_parent"
android:layout_height="wrap_content”

 

match_parent → 親にあわせる? 

レイアウト横幅親に合わせる。 親ってなんだ!

親となるものがあるので親の横幅に合わせる。親は画面の土台?

なので画面の横幅いっぱいに設定。"

"wrap_content” 

wrapは聞きなれない単語ですが包むという意味があって

wrap_content コンテンツを包むという意味なります。

たとえがコンテンツが2文字なら2文字の幅 3文字なら3文字の幅ようは

中身に合わせますよという意味らしい。

 

突然ですが

② [WebView]に名前をつける。(定義する)

android:id="@+id/web_view"

 

これは部品の名前を書くときに記述します。

android:id="@+id/名前"

 

ポイント 名前はなるべく部品の名前がわかる名前にしておきましょう。

理由は、javaから呼び出す場合は、なんの部品が推測しやすいからです。

一旦以上のことをレイアウトの基礎として覚えていきましょう。

android:layout_width="match_parent"
android:layout_height="wrap_content”

android:id="@+id/web_view" 

 

すべてを記述してエラーがでていなければOK

 

AndroidStudioではエラーがなければ修正しているファイル名名前部分に

なみなみ線が消えます。

 

↓エラーあり!

f:id:jusys2-13bpower:20200401020226p:plain

↓エラーなし

f:id:jusys2-13bpower:20200401020314p:plain

 

もっとレイアウトのことが頑張れる人へ

頑張れないひとは飛ばして下さい。

一応大事な基礎です。

WebView以外の部分を少しだけ

<?xml version="1.0" encoding="utf-8"?>        ←お約束
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" ←お約束
xmlns:app="http://schemas.android.com/apk/res-auto"   ←お約束
xmlns:tools="http://schemas.android.com/tools"     ←お約束
android:layout_width="match_parent"        
android:layout_height="match_parent"
tools:context=".MainActivity">


</androidx.constraintlayout.widget.ConstraintLayout>

お約束部分は難しいこと考えずに!

android:layout_width="match_parent"        
android:layout_height="match_parent"

みたことありますね。さっきみましたね。

 

<androidx.constraintlayout.widget.ConstraintLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

ConstraintLayoutの始まりと終わりですね。

ConstraintLayoutとはレイアウトのパターンの一つで、

自由に画面をレイアウトすることが可能で、重ねたり。

微妙な位置に調整したりなど表現しやすいことからテンプレートは

これがつかわれるみたいですね。

 

レイアウトについては、今後勉強していきましょ。

今はとりあえずほかのこと覚えましょ!

 

 f:id:jusys2-13bpower:20200401022013p:plain

 

③ [MainActivity.java]で②で名前をつけたので

  その名前で使うよって書きます。(宣言する)

 

  じゃAndroid Javaプログラムを書いていきましょう 。

 

下図はテンプレートのjavaプログラムそこに書いていく。

f:id:jusys2-13bpower:20200401022525p:plain

 

一旦上記のカーソル位置に記述していきましょ!

 

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

         ①    ②       ③     ④    ⑤

  部品名 なんでもいい   部品名       XMLに記述した名前

①~⑤番号をつけてみました。

 

①WebViewの部品を呼び出します。

②このプログラムでそいつに名前をあだ名つけます。

③④⑤WebViewの名前はweb_viewだよ。

何となくわかりますかね。何となく覚えてください。

 

findViewById はよく使うのでなんとなく使い方覚えてください。

部品を指定して指示したい場合、呼び出すときに使います。

〇〇くん ちょっときてーみたいな感じなのかな?

 

④ [WebView]が設定できるメニューの中から

  必要な設定を書きます。(設定する)

  開きたいWEBサイトのURLを設定します。

 

   先ほど任意の名前でXML内で名前を指定したweb_viewにあだ名をつけましたね。

  webViewです。

  下図のようにあだ名の後ろにピリオドを打つと選択できる候補がでてきます。

  これが使えるということですね。

  いろんな設定があります。

  ここでは画像のとおりWebViewに必要なWebClientを設定しましょう。

  WebClientの説明は今やめときましょう。

  みると二つありますね。

  Choromeがついているのとついていないの、

  部品はにてますが特徴が少し違うようです。

  それについては次回やっていきましょう。

f:id:jusys2-13bpower:20200331020924p:plain

記述すると以下のような感じですね。

以下のサンプルではwebViewではちょっとわかりにくいということで

myWebViewにしています。

ちょっと次の学習ステップの為

setContentView(R.layout.activity_main)をWebViewの下に配置してみました。

ありがちなミスをちょっとやってみます。

f:id:jusys2-13bpower:20200331085523p:plain


 では動かしてみましょう。

「メニューバー」の「実行」-「実行」をしてみましょう。

 

エミュレータは設定していないのでPixel3になってますね。 

f:id:jusys2-13bpower:20200401025359p:plain

 

エミュレータエラーがでますね。

エミュレータの設定が整っていないということです。

これがAndroid開発の洗礼です。

ここで一部の初心者は去っていくことになりますね。

Androidスマホを持っていない人は、エミュレータ(AVD)を設定していきましょう。

これは、次回別途記事を作ります。

 

f:id:jusys2-13bpower:20200331081008p:plain

ということで簡単に

スマホをパソコンとUSBで接続しましょう。

問題がなければ接続されます。 

 名前が自分の携帯名になります。

しかしこれでも動きません。

 

f:id:jusys2-13bpower:20200331081126p:plain

 

接続するとスマホに通知が来ると思います。

こちらはスマホによって表示が違うと思います。

USBの接続タイプを写真にする必要があるようです。

下図のとおり選択して再度実行してみてください。

 

f:id:jusys2-13bpower:20200331090714p:plain

f:id:jusys2-13bpower:20200331090859p:plain

 

 

おおーーインストールされたアプリ動かしてみよう!

 

 

きました! 洗礼!エラーでましたよね!

といっても!先ほどエラー設定しましたね

f:id:jusys2-13bpower:20200331085217p:plain

 

正しい位置はWebViewの定義の上に必要。

setContentView(R.layout.activity_main)の位置をかえましたね。

エラーは下図のように表示されます。

青いところ触ると対象のソースが飛びます。

f:id:jusys2-13bpower:20200331084813p:plain

 

 

余力のある人はエラーの解析方法見ていきましょう。

つらい人は、先ほどのロジックの位置を正しい位置に。

 

じゃ解析

エラーのログは直近に直接の原因の場所が書いてあります。

色がついたところが主原因ですね。

 

 

2020-03-31 08:44:37.455 24970-24970/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myapplication, PID: 24970
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.webkit.WebSettings android.webkit.WebView.getSettings()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3021)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3156)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1864)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:205)
at android.app.ActivityThread.main(ActivityThread.java:6996)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:884)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.webkit.WebSettings android.webkit.WebView.getSettings()' on a null object reference
at com.example.myapplication.MainActivity.onCreate(MainActivity.java:18)
at android.app.Activity.performCreate(Activity.java:7159)
at android.app.Activity.performCreate(Activity.java:7150)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3001)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3156) 
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1864) 
at android.os.Handler.dispatchMessage(Handler.java:106) 
at android.os.Looper.loop(Looper.java:205) 
at android.app.ActivityThread.main(ActivityThread.java:6996) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:884) 
2020-03-31 08:44:37.567 24970-24970/com.example.myapplication I/Process: Sending signal. PID: 24970 SIG: 9

 

JAVA系エラーログの法則!

通称オブジェクト指向のプログラムは複数の部品で構成されていて

見えない部品が呼び出されています。

一番下を抜粋しました。

青い部分パッケージ名がでてますね。

そしてなんかわかりませんがzygoteint.javaの884行目で一行上のRuntimeInt.javaの493行とだんだん上に向かって参照先を書いています。

この辺りは、自分で修正することはないのでエラー原因ではありません。

そして上へ上へとたどると色がついたエラー原因にたどり着きます。

at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:884) 
2020-03-31 08:44:37.567 24970-24970/com.example.myapplication I/Process: Sending signal. PID: 24970 SIG: 9

 

 エラーログは下から上にかかれている

 

 

MainActivityのプログラムで

java.lang.NullPointerException →JAVA言語のNULLエラーが発生しました。

Attempt to invoke virtual method 'android.webkit.WebSettings 

    → 'android.webkit.WebSettings指定していますがそんなのないぞ!っていてます。

 

これは理由はsetContentView(R.layout.activity_main)の位置を変更したのが原因なんです

R.layout.ativity_mainとかかれてますね。なんかこれみおぼえないですか?

R.layout.activity_main→ resのlayoutのactivity_main.xmlです。

先ほどweb_viewを定義しましたね。

resのlayoutのactivity_main.xmlをsetContentViewしてますね。

Viewにresのlayoutのactivity_main.xmlをセットしますよということです。

位置をうしろにしてしまうと。

レイアウトも指定してしていないに部品を名指しで呼び出している感じのエラーです。

 

〇〇町の田中さんといえばわかるかもしれませんが、

 

田中よんでよ田中  どこの?ってなっている状態がこのエラーです。

 

正しい位置に直しました。

 SetContentViewで全体のレイアウトが参照されています。

レイアウトがキチンと参照されたので、

次にWebViewの部品web_viewが読めるようなります。

ごれを逆にやっちゃうとプログラムはねーえ!空だよ。Nullだよ。ってなります。

f:id:jusys2-13bpower:20200331091041p:plain

 このエラーもネットで検索しましたが、原因わからず。

回答もなく困っている人いましたね。


エラーの対応方法としてエラーログをみて

今回はこの部分の一部をグーグルで検索しましょう。グーグルでです。

java.lang.NullPointerException: Attempt to invoke virtual method 'android.webkit.WebSettings android.webkit.WebView.getSettings()' on a null object reference

 

f:id:jusys2-13bpower:20200401082916p:plain

 訳してみると意外と理解しやすくなったりしますね。

 

f:id:jusys2-13bpower:20200401083220p:plain

 

なおったーポチ動いたけど

なにこれーまたエラーじゃん!

 

f:id:jusys2-13bpower:20200331090748p:plain

 

安心してください。想定どおりですよ!

それではちょっと長くなりましたが

キーマンの一人

[AndroidManifest.xml]です。

案外修正する事はあります。

今回は、下図の赤のところを入れてみてください。

[WebView]その名のとおりインターネットに接続してURLの先のホームページを表示

しますね。アプリはスマホの標準機能を使用する許可が必要となります。

 

重要なのでもう一度いいますね。

Androidアプリは、スマホの標準機能をを使用する許可が必要となります。

 

f:id:jusys2-13bpower:20200331091320p:plain

どんな権限があるかちょっとみてみましょ。

いやーいろいろありますね。さらっとでてきましたが使うもの多いですよ。

機能追加したけど動かないあれば追加します。

f:id:jusys2-13bpower:20200401084230p:plain


アプリをインストールしたときにこのアプリケーションは電話番号にアクセスを許可

を求めてますとか、GPSの許可など求めてきますね。

あれ自分でプログラム組まないとでないですが、

やらないとこんな感じでエラーがでます。

 

そして やっと  うごきましたね!

自分専用のグーグル検索画面できましたね。

f:id:jusys2-13bpower:20200331090728p:plain

 

ちょっと長くなりましたが 

おさらいです。

今回は[WebView]を構築してみました。

新規のプロジェクトから作成し、WebViewのサンプルプログラムを作りましたね。

①新規のプロジェクトの設定ポイントは理解できたでしょうか?

パッケージ名 ロケーション 言語 API思い出せますが、

思い出さない人は再度先頭から読みましょう。

②キーマンはなんだったでしょうか。

[AndroidManifest.xml] [MainActivity.java]  [activity_main.xml]です。

開発をすれば関係するものです。

③[MainActivity.java]  [activity_main.xml]の関係はどんな感じでしょうか。

 呼ぶ側呼ばれる側 そう 夫婦関係ですね。ちがうちがうか。

 いやちがわないね。そうセットなんです。

 たまに別のXMLを参照しちゃったりしますが・・・

④[activity_main.xml]に[WebView]を実装 xmlレイアウトをかいてみましたね。

⑤[MainActivity.java]で[WebView]を呼び出しをJAVAを書きました。

⑥エラーとデバックのイメージを確認しました。

⑦[AndroidManifest.xml]でスマホの利用権限を設定しましたね。

 

超大作になってしまいましたが、

今回はここまでにしましょう。

荒いですが参考になれば、幸いです。

 

今回この記事を書いた理由として、

数か月で身に着けた知識をいったん整理したかったのが目的で、

初心者なので認識があやまりがあるかもしれませんが、

同じ初心者の参考手助けになればとおもいます。

私もしっかり整理することができました。

 

次回は、[WebView]の応用と今回説明しきれなかった

[AndroidManifest.xml] [MainActivity.java] を少し分解して説明していきます。

ここもAndroid開発の基礎がつまっていてしっかり身につけないといけないところです。加えてJAVAの書き方なども話していくことします。

 

ここまで読む人いるのかな?

 

おつかれーーす おれ!おつかれーーす 読んでくれた勇士!