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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

0回答

450閲覧

ANDROID STUDIO LOLIPOP対策 API22 webVIEWエラー

退会済みユーザー

退会済みユーザー

総合スコア0

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2019/11/22 00:26

編集2019/11/22 03:42

#追記 該当ソース

イメージ説明

◆AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <resources> <color name="colorPrimary">#e56700</color> <color name="colorPrimaryDark">#B35900</color> <color name="colorAccent">#D81B60</color> </resources> ◆DashboardFragment.kt package com.HOGE.HOGEapprication.ui.dashboard import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.webkit.WebResourceRequest import android.webkit.WebView import android.webkit.WebViewClient import android.widget.TextView import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import com.HOGE.HOGEapprication.R class DashboardFragment : Fragment() { private lateinit var dashboardViewModel: DashboardViewModel override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { dashboardViewModel = ViewModelProviders.of(this).get(DashboardViewModel::class.java) val root = inflater.inflate(R.layout.fragment_dashboard, container, false) val textView: TextView = root.findViewById(R.id.text_dashboard) dashboardViewModel.text.observe(this, Observer { textView.text = it }) /* val myWebView: WebView = root.findViewById(R.id.webview_dashboard) myWebView.webViewClient = object : WebViewClient() { /*WebViewで新しいurlに対してloadingが走った時 API Level 24(= Android 7)未満稼働しない可能性あり*/ override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean { return false // アプリからブラウザに飛ばせない } } myWebView.loadUrl("https://www.google.com") */ return root } } ◆DashboardViewModel.kt package com.HOGE.HOGEapprication.ui.dashboard import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel class DashboardViewModel : ViewModel() { private val _text = MutableLiveData<String>().apply { value = "This is dashboard Fragment" } val text: LiveData<String> = _text } ◆ACTIVITY_MAIN.XML <?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" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingTop="?attr/actionBarSize"> <WebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent" /> <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/nav_view" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="0dp" android:layout_marginEnd="0dp" android:background="?android:attr/windowBackground" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:menu="@menu/bottom_nav_menu" /> <fragment android:id="@+id/nav_host_fragment" android:name="androidx.navigation.fragment.NavHostFragment" android:layout_width="match_parent" android:layout_height="match_parent" app:defaultNavHost="true" app:layout_constraintBottom_toTopOf="@id/nav_view" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:navGraph="@navigation/mobile_navigation" /> </androidx.constraintlayout.widget.ConstraintLayout> ◆FRAGMENT_DASHBOARD.XML <?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" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/text_dashboard" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:layout_marginEnd="8dp" android:textAlignment="center" android:textSize="20sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <!-- webページ表示--> <WebView android:id="@+id/webview_dashboard" android:layout_width="match_parent" android:layout_height="match_parent" /> </androidx.constraintlayout.widget.ConstraintLayout>

お世話になります。
アンドロイドスタジオでLOLIPOP API22最小要件対策をしています。WEBVIEWを実行できず質問させて頂きます。

他apiでは正常に稼働しているのですがwebviewを追加すると、以下エラーが出てしまいます。既にほかのコードはデバッグできており以下コードがエラー原因コードである事は特定できています。以下のコードはもちろん通常のwebviewですのでAPIをあげれば正常に動作しますがapi22ではエラーとなります。

<WebView android:id="@+id/webview_home" android:layout_width="match_parent" android:layout_height="match_parent" />

エラー内容は以下です。

11-22 00:02:22.383 5432-5432/com.py.pyapprication D/AndroidRuntime: Shutting down VM 11-22 00:02:22.384 5432-5432/com.py.pyapprication E/AndroidRuntime: FATAL EXCEPTION: main Process: com.py.pyapprication, PID: 5432 ception: Unable to start activity ComponentInfo{com.py.pyapprication/com.py.pyapprication.MainActivity}: android.view.InflateException: Binary XML file line #21: Error inflating class android.webkit.WebView at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)

ためしたこと
例えばapi29では正常に上記コードが稼働しエラーは発生してませんでした。

よろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2019/11/22 02:27

エラー再現用の最小限のプロジェクトを作成してソース/レイアウトをご提示願えますでしょうか.
退会済みユーザー

退会済みユーザー

2019/11/22 03:32

了解しました。すべてかきます。
退会済みユーザー

退会済みユーザー

2019/11/22 03:38

jimbe様 質問欄の一番上にソースを提示しました。ご確認宜しくお願い致します。
退会済みユーザー

退会済みユーザー

2019/11/22 03:45

自分の中で試して以下が怪しいと思っているのですが、api22と29にどのように分岐してコードをかくべきかわからず困っています。数日かなりはまっておりお手数かけますがご教示ください。 val myWebView: WebView = root.findViewById(R.id.webview_dashboard) myWebView.webViewClient = object : WebViewClient() { /*WebViewで新しいurlに対してloadingが走った時 API Level 24(= Android 7)未満稼働しない可能性あり*/ override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean { return false // アプリからブラウザに飛ばせない } } myWebView.loadUrl("https://www.google.com")
jimbe

2019/11/22 08:32 編集

状況や異常表示内容は違うのですが, 同じく Lollipop での WebView でご質問されている方がいらっしゃいます. https://teratail.com/questions/224749 検索によると, API21~22[Lollipop,Android5.0~5.1]の(エミュレータの?) WebView には以前から問題があるようですが, その問題の詳細や今日現在の修正状況は分かりません. > https://stackoverflow.com/questions/41025200/android-view-inflateexception-error-inflating-class-android-webkit-webview/49024931 まだ折角ご提示いただいたコードを試していないのですが, もしやするとエミュレータ上での問題で, 実機では発生しない類かもしれません.
退会済みユーザー

退会済みユーザー

2019/11/22 09:02 編集

この記事みました。初期ロリポップのバグですよね。ぜひコード試してください。返信待ってます
jimbe

2019/11/22 12:14

テキトウに設定した API22 の エミュレータで動かしてみましたが, google は表示されないものの, 落ちません. build.gradle, menu/bottom_nav_menu と navigation/mobile_navigation はどのような内容でしょうか.
退会済みユーザー

退会済みユーザー

2019/11/22 14:12 編集

build.gradle, menu/bottom_nav_menu と navigation/mobile_navigation はどのような内容でしょうか. すべてデフォルトです。22で表示されないとなるとロリポップのバグではないのか。っきしょー。stoppedというエラーも出ない感じでしょうか?
退会済みユーザー

退会済みユーザー

2019/11/22 14:32 編集

アプリからブラウザに飛ばしたくないのでshouldOverrideUrlLoadingを利用しています。lolipopまで下げると悪さをしている気がします。 参考 https://qiita.com/tarumzu/items/c991d66747fd092ff0d9 例えばAPIを判定しIF文で処理分ける事はできる場合コードをご教示いただけますと幸いです。
jimbe

2019/11/22 15:56

当初ご提示の画面のようにダイアログが出て止まっていましたが, それは MainActivity の onCreate の以下コメント部分の所為でした. override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main_activity) /*if (savedInstanceState == null) { supportFragmentManager.beginTransaction() .replace(R.id.container, DashboardFragment.newInstance()) .commitNow() }*/ } こちらでは android studio の新プロジェクトの生成の際に Fragment+ViewModel から生成しましたので, navigation 関係が無く, build.gradle(app) の dependencies に def nav_version = "2.1.0" implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" implementation "androidx.navigation:navigation-ui-ktx:$nav_version" を追加し, app:menu="@menu/bottom_nav_menu" と app:navGraph="@navigation/mobile_navigation" は消しています. > 例えばAPIを判定しIF文で処理分ける Build.VERSION.SDK_INT のことでしょうか.
jimbe

2019/11/22 16:25

android studio の new Project で Bottom Navigation Activity から作り直しましたが, Dashboard に WebView を追加しても落ちず, DashboardFragment のコメントされていた WebView の個所を有効にすると, 画面下部の Dashboad を押した際に(Homeなら”This is home Fragment”と表示される範囲に) > Webpage not available > > The webpage at https://www.google.com/ > could not be loaded because: > > net::ERR_CACHE_MISS と表示されています.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問