android.view.InflateException ক্লাসে inflating ত্রুটি android.webkit.WebView


130

ললিপপ (এপিআই 22) এ আমার অ্যাপ্লিকেশনটিতে প্রতিবার আমি একটি ওয়েবভিউ দেখায় অ্যাপ্লিকেশন ক্র্যাশ হয়। এই ইভেন্টটি সম্পর্কিত আমার অ্যান্ড্রয়েড বিকাশকারী কনসোলে আমার একাধিক ক্রাশ হয়েছে।

এটি অ্যান্ড্রয়েড 4, 6 এবং 7 এ কাজ করে তা বলার দরকার নেই।

স্ট্যাক ট্রেস পড়া (এই পোস্টের শেষে পোস্ট করা), কিছু আমাকে বাগিয়ে দেয়

Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x2040003

আমি কোনও ভাগ্য ছাড়াই উত্পাদিত আর.জেভা অনুসন্ধান করেছিলাম, স্পষ্টতই কারণ আইডিটি নেই, তবে এটি চেষ্টা করার মতো ছিল।

সমস্যার আশপাশে গুগলিং কীভাবে ললিপপ ওয়েবভিউ পরিচালনা করে তা সম্পর্কিত বলে মনে হচ্ছে। আমি জিডিসিতে ক্র্যাশ প্রতিবেদকের কাছে পাওয়া একটি ডিভাইসের উপর ভিত্তি করে ললিপপ দিয়ে একটি নতুন এভিডি শুরু করেছি এবং আমি সমস্যার পুনরুত্পাদন করতে পারি।


সম্পূর্ণ স্ট্যাক ট্রেস:

android.view.InflateException: Binary XML file line #7: Error inflating class android.webkit.WebView
                  at android.view.LayoutInflater.createView(LayoutInflater.java:633)
                  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)
                  at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682)
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)
                  at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
                  at it.artecoop.ibreviary.WebViewFragment.onCreateView(WebViewFragment.java:67)
                  at android.support.v4.app.Fragment.performCreateView(Fragment.java:2087)
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1113)
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1295)
                  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801)
                  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1682)
                  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:541)
                  at android.os.Handler.handleCallback(Handler.java:739)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:135)
                  at android.app.ActivityThread.main(ActivityThread.java:5254)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at java.lang.reflect.Method.invoke(Method.java:372)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
               Caused by: java.lang.reflect.InvocationTargetException
                  at java.lang.reflect.Constructor.newInstance(Native Method)
                  at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
                  at android.view.LayoutInflater.createView(LayoutInflater.java:607)
                  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) 
                  at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682) 
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741) 
                  at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
                  at it.artecoop.ibreviary.WebViewFragment.onCreateView(WebViewFragment.java:67) 
                  at android.support.v4.app.Fragment.performCreateView(Fragment.java:2087) 
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1113) 
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1295) 
                  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801) 
                  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1682) 
                  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:541) 
                  at android.os.Handler.handleCallback(Handler.java:739) 
                  at android.os.Handler.dispatchMessage(Handler.java:95) 
                  at android.os.Looper.loop(Looper.java:135) 
                  at android.app.ActivityThread.main(ActivityThread.java:5254) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at java.lang.reflect.Method.invoke(Method.java:372) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
               Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x2040003
                  at android.content.res.Resources.getText(Resources.java:299)
                  at android.content.res.Resources.getString(Resources.java:385)
                  at com.android.org.chromium.content.browser.ContentViewCore.setContainerView(ContentViewCore.java:684)
                  at com.android.org.chromium.content.browser.ContentViewCore.initialize(ContentViewCore.java:608)
                  at com.android.org.chromium.android_webview.AwContents.createAndInitializeContentViewCore(AwContents.java:631)
                  at com.android.org.chromium.android_webview.AwContents.setNewAwContents(AwContents.java:780)
                  at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:619)
                  at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:556)
                  at com.android.webview.chromium.WebViewChromium.initForReal(WebViewChromium.java:311)
                  at com.android.webview.chromium.WebViewChromium.access$100(WebViewChromium.java:96)
                  at com.android.webview.chromium.WebViewChromium$1.run(WebViewChromium.java:263)
                  at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.drainQueue(WebViewChromium.java:123)
                  at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue$1.run(WebViewChromium.java:110)
                  at com.android.org.chromium.base.ThreadUtils.runOnUiThread(ThreadUtils.java:144)
                  at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.addTask(WebViewChromium.java:107)
                  at com.android.webview.chromium.WebViewChromium.init(WebViewChromium.java:260)
                  at android.webkit.WebView.<init>(WebView.java:554)
                  at android.webkit.WebView.<init>(WebView.java:489)
                  at android.webkit.WebView.<init>(WebView.java:472)
                  at android.webkit.WebView.<init>(WebView.java:459)
                  at java.lang.reflect.Constructor.newInstance(Native Method) 
                  at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
                  at android.view.LayoutInflater.createView(LayoutInflater.java:607) 
                  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) 
                  at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682) 
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741) 
                  at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
                  at it.artecoop.ibreviary.WebViewFragment.onCreateView(WebViewFragment.java:67) 
                  at android.support.v4.app.Fragment.performCreateView(Fragment.java:2087) 
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1113) 
                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1295) 
                  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801) 
                  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1682) 
                  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:541) 
                  at android.os.Handler.handleCallback(Handler.java:739) 
                  at android.os.Handler.dispatchMessage(Handler.java:95) 
                  at android.os.Looper.loop(Looper.java:135) 
                  at android.app.ActivityThread.main(ActivityThread.java:5254) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at java.lang.reflect.Method.invoke(Method.java:372) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

এটি সিস্টেম WebViewসমস্যার মতো দেখায় । আমি জানি না / যখন অনুকরণকারীরা এতে আপডেট পান। আপনি কি হার্ডওয়ার চেষ্টা করেছেন?
কমন্সওয়্যার

@ কমন্সওয়্যার না, ললিপপ সহ এখনই আমার কোনও ডিভাইস নেই। তবে ক্র্যাশ প্রতিবেদক এর জন্য একাধিক এন্ট্রি দেখিয়ে চলেছে।
ভ্যালারিও

18
এই প্রশ্নটি ২০১ 2016 সালের ছিল তবে এই ইস্যুটি 2019 সালের শেষের দিকে আবারও স্রোফাক্স করছে you আপনি যদি ওয়েব অনুসন্ধান থেকে এখানে পৌঁছে থাকেন তবে আপনার ক্ষেত্রে প্রযোজ্য উত্তরগুলি বেছে নেওয়ার বিষয়টি নিশ্চিত করুন।
ব্যবহারকারী 1032613

আমার কাছে এপিআই স্তরের 21 এর দৈহিক ডিভাইস নেই I এটি যেহেতু শারীরিক ডিভাইসে কাজ করবে কিনা তা এখানে যে কেউ আমাকে জানান! এখন আমার অ্যাপ ঝুঁকিতে আছে!
সুমিত শুক্লা

আমার জন্য, গুগল প্লে হুয়াওয়ে পি 8 লাইটটি অ্যান্ড্রয়েড 5.0 চলমান সমস্যাটির কথা জানায় তবে এটি অ্যান্ড্রয়েড .0.০.১ চালিত আসল স্যামসাং নোট ৪ বা অ্যান্ড্রয়েড 4.৪.২ চালিত একটি স্যামসাং নোট ৮ ট্যাবলেট নিয়ে আসে নি।
ফ্র্যাক্টালবোজ

উত্তর:


168

আপনি যদি ব্যবহার করেন তবে পরিবর্তে androidx.appcompat:appcompat:1.1.0চেষ্টা androidx.appcompat:appcompat:1.0.2করুন। দেখে মনে হচ্ছে অ্যান্ড্রয়েডে 1.1.0বাগটি ঠিক করে নি ।WebView5.1.1

ফেব্রুয়ারি -2020 আপডেট: 1.0.2অনেক লোকের (আমার অ্যাপ্লিকেশন সহ) কাজ করা বন্ধ করতে প্রত্যাবর্তন করা , তবে বর্তমান সংস্করণটি ব্যবহার androidx.appcompat:appcompat:1.2.0-alpha02করে ক্র্যাশটি ঠিক করা হয়েছে। (আমি এটি গুগলের স্বয়ংক্রিয় "প্রি-লঞ্চ প্রতিবেদন" পরীক্ষার সময় অ্যান্ড্রয়েড 5.0 চলমান একটি হুয়াওয়ে পি 8 লাইটে দেখছিলাম)।

জুন -2020 আপডেট: ফেব্রুয়ারী -2020 আপডেটে উল্লিখিত একের চেয়ে আরও নতুন রিলিজ উপলব্ধ রয়েছে, আপনি বর্তমানে উপলব্ধ সংস্করণগুলি এখানে দেখতে পারবেন:


3
1.1.0 রাখার এবং এটি ঠিক করার জন্য কি কোনও বাগ ফিক্স রয়েছে? আমরা ০.০.২-তে উপস্থিত না থাকা কিছু জিনিসের উপর নির্ভরশীল এবং মনে হয় যে ১.১.০ এর কিছু আলফা বা বিটা সংস্করণে এই বাগ নেই।
পম্পাজিয়া

3
হ্যাঁ একটি পরিষ্কার এটি আপনাকে ধন্যবাদ! আমি beta01 ব্যবহার করছি এবং সবকিছু ঠিক আছে বলে মনে হচ্ছে। আমি এটি ব্যবহার চালিয়ে যাব কারণ যেভাবে যাইহোক 1.1.0 ব্যবহারের কোনও সুস্পষ্ট সুবিধা নেই।
পাম্পজিয়া

11
এই প্রদেশের সাথে সম্পর্কিত একটি সমস্যা রয়েছে: ইস্যুজেট্র্যাকার
ব্রাইস গাবিন

3
আজকের মতো, ডাউনগ্রেড এটি কাজ করছে না, আমার ক্ষেত্রে, এই ইস্যুটিউট্রেকার জিও.এল / 141132133 থেকে সমাধানটি কাজ করে: "সম্ভবত এই সমস্যাটি সমাধানের সবচেয়ে সহজ উপায় হ'ল গ্র্যাডলকে সংস্করণটি 1.1.0- এ সেট করতে বাধ্য করা rc01। এটি আপনার গ্রেড ফাইলে যুক্ত করুন config কনফিগারেশনস.ল {রেজোলিউশনস্ট্রেজি {ফোর্স 'androidx.appcompat: appcompat: 1.1.0-rc01'}} "
তালু

3
androidx.appcompat:appcompat:1.2.0-alpha03খুব কাজ করে
আরটিম

45

সতর্কতা: এই পরিশ্রম কিছু জিনিস ভঙ্গ করতে পারে; বিশদ জন্য মন্তব্য দেখুন

আপনি যদি এক্সএমএল লেআউট থেকে ওয়েবভিউকে স্ফীত করতে চান তবে আপনি এটিকে একটি সুন্দর সামান্য সাবক্লাসে আবৃত করতে পারেন ( আইকোস্টেটের উত্তরের ভিত্তিতে ):

public class LollipopFixedWebView extends WebView {
    public LollipopFixedWebView(Context context) {
        super(getFixedContext(context));
    }

    public LollipopFixedWebView(Context context, AttributeSet attrs) {
        super(getFixedContext(context), attrs);
    }

    public LollipopFixedWebView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(getFixedContext(context), attrs, defStyleAttr);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public LollipopFixedWebView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(getFixedContext(context), attrs, defStyleAttr, defStyleRes);
    }

    public LollipopFixedWebView(Context context, AttributeSet attrs, int defStyleAttr, boolean privateBrowsing) {
        super(getFixedContext(context), attrs, defStyleAttr, privateBrowsing);
    }

    public static Context getFixedContext(Context context) {
        return context.createConfigurationContext(new Configuration());
    }
}

সম্পাদনা: কোটলিনের সাথে এখন আরও ভাল

class LollipopFixedWebView @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0,
    defStyleRes: Int = 0
) : WebView(context.createConfigurationContext(Configuration()), attrs, defStyleAttr, defStyleRes)

1
আমি একই সমস্যাটি পেয়েছি এবং এটি সমাধানের জন্য এই সমাধানটি ব্যবহার করেছি, আপনাকে ধন্যবাদ
ita04g9

ডিভাইসে অ্যান্ড্রয়েড ওয়েবভিউ আপডেট করাও সমস্যার সমাধান করে
ডিসপ্লেটির নাম

2
2019 সালে এখনও সমস্যা এবং এটি কাজ করে, তবে কেন / কীভাবে, তা যদি ব্যাখ্যা করা হয় তবে ভাল হবে তা আমার ধারণা নেই। এছাড়াও আমি সতর্কতাটি পেয়েছি চতুর্থ নির্মাণকারী "পাবলিক ললিপপফিক্সড ওয়েভ ভিউ (প্রসঙ্গ প্রসঙ্গে, অ্যাট্রিবিউটসেট অ্যাটর্স, ইন ডিফস্টাইলআটার, ইন ডিফস্টাইলরেস)"
ডেভিড

4
এই কার্যকারিতা সম্পর্কে মাত্র একটি সতর্কতার শব্দ: একটি ফাঁকা প্রসঙ্গ সহ একটি ওয়েবভিউ ইনস্ট্যান্ট করা অনিচ্ছাকৃত পার্শ্ব প্রতিক্রিয়া হতে পারে। উদাহরণস্বরূপ, ওয়েবভিউ থেকে অ্যাকশনমোড সম্ভবত আর কাজ করবে না (অর্থাত্ পাঠ্য হাইলাইট করার জন্য দীর্ঘ-টিপুন)।
দিমিত্রি ব্রেন্ট

5
@ দিমিত্রি ব্র্যান্ট যেমন বলেছিলেন এটি বাস্তবায়নের সময় খুব সাবধানতা অবলম্বন করুন কারণ এতে ক্ষেত্রের ড্রপ ডাউন এবং পাঠ্যকে হাইলাইট করার জন্য দীর্ঘক্ষণ টিপানো সহ কয়েকটি জিনিস ভেঙে যায় !
ব্যবহারকারী5507535

42

আপনি যদি ব্যবহার করছেন androidx.appcompat:appcompat:1.1.0এবং androidx.appcompat:appcompat:1.0.2আপগ্রেড করতে বা আপগ্রেড করতে না চান তবে গুগল ইস্যু ট্র্যাকার সম্পর্কে এই মন্তব্যেandroidx.appcompat:appcompat:1.2.0-alpha03 বর্ণিত আরও একটি সমাধান রয়েছে ।

আমি লক্ষ্য করেছি যে আবেদন ওভাররাইড কনফিগারেশন কল করার পরে Context.getAssets()এবং Context.getResources().getAssets()একই অ্যাসেটম্যানেজার অবজেক্টটি ফিরিয়ে দিচ্ছে না। Context.getAssets()সম্পদ ম্যানেজারটি অন্য প্যাকেজগুলিতে (সিস্টেম ওয়েবভিউ প্যাকেজ সহ) সংস্থানগুলি অ্যাক্সেস করতে পারে না থেকে ফিরে আসে , যার ফলে ওয়েবভিউ ক্র্যাশ হয়ে যায়। আমি Context.getAssets()ফিরতে ওভাররাইড getResources().getAssets()করলে সমস্যাটি চলে যায়।

সেই মন্তব্যের ভিত্তিতে, আপনি getAssets()ওয়েবভিউয়ের ক্রিয়াকলাপে ওভাররাইড করতে পারেন যাতে getResources().getAssets()সমস্যাটি সমাধান করার পরিবর্তে এটি ফিরে আসে ।

জাভা

@Override
public AssetManager getAssets() {
    return getResources().getAssets();
}

Kotlin

override fun getAssets(): AssetManager {
    return resources.assets
}

3
দুর্দান্ত উত্তর +1
শিরেন 85

হাই, যদি এটি সত্য হয় তবে এটি কীভাবে অ্যাপস কমপ্যাক্টের প্রকাশের সাথে সংশোধন করা হবে যা সম্পদ ম্যানেজার এবং নিজেই ওয়েবভিউয়ের সাথে সম্পর্কিত নয়?
সিনাপ্সে

এ খুঁজছি এই তালিকা পরিবর্তনের এটা যে কিছু WebView সংস্করণের সাথে সমস্যা রয়েছে বলে মনে হয় applyOverrideConfigurationAppCompat গ্রন্থাগার ভিতরে কল।
প্রবীরা

34

আমার পরামর্শ হ'ল কাস্টম / নতুন Configurationকেবল তখনই ব্যবহার করুন যখন "মূল এক" সমস্যা সৃষ্টি করে, তাই শুধুমাত্র ললিপপ on @ স্পেসবিজোন কোডটি অ্যান্ড্রয়েড ৮.x অবধি ৯ এবং কিউ (কারেন্টলি বিটা) পর্যন্ত ভাল কাজ করে, প্রতিটি নির্বাচন / ড্রপডাউন প্রেস পিক দেখায় না AlertDialog, পরিবর্তে getFixedContext"মেমরিফিড" সঠিক সংস্করণ কোড সহ স্থির পদ্ধতির নীচে ...

public class LollipopFixedWebView extends WebView {

    public LollipopFixedWebView(Context context) {
        super(getFixedContext(context));
    }

    public LollipopFixedWebView(Context context, AttributeSet attrs) {
        super(getFixedContext(context), attrs);
    }

    public LollipopFixedWebView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(getFixedContext(context), attrs, defStyleAttr);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public LollipopFixedWebView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(getFixedContext(context), attrs, defStyleAttr, defStyleRes);
    }

    private static Context getFixedContext(Context context) {
        if (Build.VERSION.SDK_INT >= 21 && Build.VERSION.SDK_INT < 23) // Android Lollipop 5.0 & 5.1
            return context.createConfigurationContext(new Configuration());
        return context;
    }
}

21

আপনি যদি androidx.appcompat: appcompat: 1.1.0 ব্যবহার করে থাকেন তবে হয় androidx.appcompat: appcompat: 1.0.2 এ পরিবর্তন করুন বা আপনি যদি ডাই নাইট থিম ব্যবহার করতে চান তবে নীচে আপনার ক্রিয়াকলাপে ওভাররাইড কনফিগারেশনটি ওভাররাইড করুন। (দ্রষ্টব্য: ডার্ক থিম থেকে হালকা থিমে স্যুইচ করার সময় এর জন্য অ্যাপ্লিকেশন পুনঃসূচনা প্রয়োজন এবং বিপরীতে)।

override fun applyOverrideConfiguration(overrideConfiguration: Configuration?) {
        if (Build.VERSION.SDK_INT in 21..25 && (resources.configuration.uiMode ==  applicationContext.resources.configuration.uiMode)) {
                return
        }
        super.applyOverrideConfiguration(overrideConfiguration)
}

এই workaround কাজ করে, কিন্তু এটি 21..22পরিবর্তে, জন্য করা উচিত নয় 21..25? সমস্যাটি 23++ এআইপি তে দেখা যাচ্ছে না।
দিমিত্রি ব্রেন্ট

5
এই সংশোধনটিই এই ক্র্যাশটির কারণ ঘটেছে - android.googlesource.com/platform/frameworks/support/+/… । সুতরাং, কোড অনুসারে, ক্র্যাশটি ডিভাইসগুলিতে গুগল প্লে স্টোর ইনস্টল না থাকা এবং অ্যান্ড্রয়েড ওয়েবভিউ সংস্করণ <50 এর মধ্যে API 21..25 ​​এ ঘটবে।
এআর মিথিলি শরণ

Androidx.appcompat এ ডাউনগ্রেড: অ্যাপকম্প্যাট: 1.0.2 কৌশলটি করুন, ধন্যবাদ
তালু

3
জাভাতে আমার কাজটি মনে হয় যা আমার পক্ষে কাজ করে বলে মনে হয় (ভয়ঙ্কর ফর্ম্যাটিংয়ের জন্য দুঃখিত তবে এটি কোনও বন্দরের নতুন উত্তর নয়):@Override public void applyOverrideConfiguration(Configuration overrideConfiguration) { if (Build.VERSION.SDK_INT >= 21 && Build.VERSION.SDK_INT <= 25) { return; } super.applyOverrideConfiguration(overrideConfiguration); }
মাইক হার্ডি

@ আরমিথিলিসরণ আপনি কেন বলছেন যে এটি কেবল "ডিভাইসগুলিতে ঘটে যেখানে গুগল প্লে স্টোর ইনস্টল করা হয়নি এবং অ্যান্ড্রয়েড ওয়েবভিউ সংস্করণ <50"?
andrei

20

আপনি যদি ডে নাইট থিম স্যুইচিং (বা অন্যান্য ইউইমোড ইভেন্টগুলি) এর উপর নির্ভর না করে থাকেন তবে আপনি অ্যান্ড্রয়েড যুক্ত করতে পারেন : কনফিগারেশনগুলি " রিসোর্স কনফিগারেশন আপডেট করে এবং এর মাধ্যমে ওয়েবভিউ মুদ্রাস্ফীতিতে জগাখিচলতা রোধ করতে ওয়েবভিউ ক্রিয়াকলাপে " uiMode "যুক্ত করতে পারে।


এটি আমার পক্ষে কাজ করেছে। আমার কনস্ট্রেন্টলয়েআউট ১.১.৩ প্রয়োজন, যার জন্য অ্যাপকম্প্যাট ১.১.০ প্রয়োজন, সুতরাং পুনরায় ফিরিয়ে নেওয়া কোনও বিকল্প ছিল না।
ম্যাট রবার্টসন

১.০.২ এ ডাউনগ্রেডিং আমার পক্ষে কোনও তাত্পর্যপূর্ণ হয়নি, তবে এই পদ্ধতিটি কার্যকর হয়েছিল।
ক্রিসবুটো

দুর্দান্ত সমাধান!
বুজান

17

ওয়েবভিউ তৈরির জন্য ব্যবহারের চেষ্টা করুন:

mWebView = new WebView(getActivity().createConfigurationContext(new Configuration()));

এবং আমার এক্সএমএল ফাইল?
একাও পিট্টা

কোনও লাইব্রেরির সংস্করণকে ডাউনগ্রেড না করেই এটি আমার সমস্যার সমাধান করেছে
বাগগুলি

10

এবং আরও একবার সমস্যা সমাধানের চেষ্টা করুন। আপনার ক্রিয়াকলাপে এই পদ্ধতিটি ওভাররাইড করা উচিত:

    @Override
    public void applyOverrideConfiguration(final Configuration overrideConfiguration) {
        if (Build.VERSION.SDK_INT >= 21 && Build.VERSION.SDK_INT < 25) {
            overrideConfiguration.uiMode &= ~Configuration.UI_MODE_NIGHT_MASK;
        }
        super.applyOverrideConfiguration(overrideConfiguration);
    }

5

আমি এমুলেটরে 21 এআইপি-তে ক্রাশটি পুনরুত্পাদন করতে সক্ষম হয়েছি।

সুতরাং আমি এটি বাস্তবায়নের সাথে যুক্ত করার চেষ্টা করেছি, ডক্সে বর্ণিত হিসাবে :

dependencies {
    def appcompat_version = "1.1.0"

    implementation "androidx.appcompat:appcompat:$appcompat_version"
    // For loading and tinting drawables on older versions of the platform
    implementation "androidx.appcompat:appcompat-resources:$appcompat_version"
}

যোগ করার পদ্ধতি appcompat-resourcesহয়নি না সমস্যা সমাধানের।

সম্ভবত ভবিষ্যতের সংস্করণটি হবে তবে আমি উল্লেখ করতে চেয়েছিলাম যে এখানে একটি পরিপূরক সংস্থান লাইব্রেরি রয়েছে যা এই সমস্যাটির সমাধান করার কথা। সুতরাং এটির একটি নতুন সংস্করণ দিয়ে এটি ঠিক করার চেষ্টা করার সময় appcompat, appcompat-resourcesএকই সংস্করণ সহ লাইব্রেরি যুক্ত করুন ।

androidx.appcompat:appcompat:1.0.2এই সমস্যাটিকে কার্যতালিকা হিসাবে সমাধানের দিকে প্রত্যাবর্তন ।


আমি "androidx.appcompat:appcompat-resources:$appcompat_version"1.0.2 সংস্করণে ফিরে যেতে পারিনি । "ত্রুটি: সমাধান করতে ব্যর্থ: androidx.appcompat: appcompat- সংস্থানসমূহ: 1.0.2"
মুরিলো কমিনো

অ্যাপকম্প্যাট-সংস্থানগুলি 1.0.2 এর জন্য উপলব্ধ নয়। আমার আপডেট হওয়া উত্তরটি দেখুন।
ম্যানুয়েল

আপনাকে অনেক ধন্যবাদ, এটি কাজ করে। আমি আশা করি ভবিষ্যতের সংস্করণগুলিতে এটি সমাধান হবে।
মুরিলো কোমিনো

5

নীচের কোডটি সমস্যার সমাধান করবে। এটি আপনার যুক্ত করুন Activity:

@Override 
public AssetManager getAssets() {
    return getResources().getAssets(); 
}

3

পার্শ্ব নোট হিসাবে, আমি কিছু সময়ের জন্য সংগ্রাম করেছি যদিও আমি ১.০.২ এ ডাউনগ্রেড করেছিলাম, কেবল এ কারণে যে আমার কাছে অ্যাপকম্পেটের একটি ট্রানজিটিভ নির্ভরতা রয়েছে: অ্যান্ড্রয়েডএক্স.কমস্ট্র্যান্টলাইউটের মাধ্যমে: ১.১.০: প্রতিবন্ধকতা: ২.০.০-বিটা ৩। একবার আমি এটি বাধা হিসাবে ডাউনগ্রেড করেছি: 1.1.3 সবকিছু ঠিকঠাক কাজ করেছে

( Https://issuetracker.google.com/issues/141351441 সমস্যা অনুসারে অ্যাপকম্প্যাট দিয়ে শীঘ্রই ঠিক করা হবে: 1.2.0-alpha02)


3

আমি এই উত্স থেকে সর্বশেষতম সংস্করণ ব্যবহার করেছি । আপনি যা ভাল মনে করেন তার উপর ভিত্তি করে আপনার নিজের পরীক্ষা করে দেখুন

আপনি যদি এড়াতে চান তবে নীচে বাস্তবায়ন সমস্যার সমাধান করে:

implementation 'androidx.appcompat:appcompat:1.2.0-beta01'

2

戴 me আমার জন্যও ঠিক ছিল। তবে কেবল অ্যানড্রয়েড.এপকম্প্যাট: অ্যাপকম্প্যাট: 1.1.0 থেকে 1.0.2 সাফল্য অর্জন করতে পারেনি।

আমি আমার পূর্ববর্তী সমস্ত আপগ্রেড অ্যান্ড্রয়েডক্স সংস্করণগুলি থেকে ডাউনগ্রেড করেছি

implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'com.google.android.material:material:1.1.0-alpha10'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.recyclerview:recyclerview:1.1.0-beta04'
implementation 'androidx.viewpager2:viewpager2:1.0.0-beta04'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
implementation 'androidx.preference:preference:1.1.0'
implementation 'androidx.core:core:1.2.0-alpha04'

আবার

implementation 'androidx.appcompat:appcompat:1.1.0-rc01'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'com.google.android.material:material:1.1.0-alpha09'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.recyclerview:recyclerview:1.1.0-beta03'
implementation 'androidx.viewpager2:viewpager2:1.0.0-beta03'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.vectordrawable:vectordrawable:1.1.0-rc01'
implementation 'androidx.preference:preference:1.1.0-rc01'
implementation 'androidx.core:core:1.2.0-alpha03'

গুগলস কোডটি ত্রুটিমুক্ত এবং ভালভাবে পরীক্ষিত নয় এবং কারও কখনওই সংস্করণগুলিকে আপ্লিকভাবে আপগ্রেড করা উচিত নয় এমন একটি অনুস্মারক।


আপনি কি androidx.appcompat: অ্যাপকম্প্যাটটি 1.1.0-rc01 এ ডাউনগ্রেড করেছেন? 1.0.2 এ না?
hebেহজিক বাবিচ

এটি 1.0.2 দিয়ে চেষ্টা করেও কোনও সাফল্য পেলেন না। অ্যাপকম্প্যাটটির সাথে একত্রে অন্যান্য নির্ভরতাগুলির মধ্যে একটি হতে হবে।
এস গিজেল

কেবল ডাউনগ্রেডিং androidx.appcompat:appcompatআমার জন্য কাজ করেছিল। ভবিষ্যতের পাঠকদের কাছে: "গ্রেডল সিঙ্ক" নিশ্চিত করে নিশ্চিত করুন এবং আরও স্টাফ ডাউনগ্রেড করার আগে এটি আপনার পক্ষে যথেষ্ট নয়।
ব্যবহারকারী 1032613

Downgrading এটা প্রকল্পে নির্ভরতা সংস্করণ চেক করতে অতিরিক্ত হবে না পরে stackoverflow.com/a/39020703/6055194
Zhebzhik Babich

2
/**
 * Customized WebView to avoid crashing on Android 5 and 6 (API level 21 to 23)
 * If the Android System WebView is old and is not updated, the WebView view inflation fails.
 * To reproduce the issue, try on OS 5 or 6 with Android System WebView 72.0.3626.76 (this version is just a reference point from being which we saw no crashes)
 */
class BrilliantWebView : WebView {

   companion object {
       private fun getBrilliantContext(context: Context?) =
            if (!OSUtils.hasNougat()) // OS < 24 or OS < 7.0
                context?.createConfigurationContext(Configuration())
            else
                context
    }

   constructor(context: Context?) : super(getBrilliantContext(context))
   constructor(context: Context?, attrs: AttributeSet?) : super(getBrilliantContext(context), attrs)
   constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(getBrilliantContext(context), attrs, defStyleAttr)
}

@ সিমিট-শুক্লা কোড স্নিপেট পোস্ট করে যা আমাদের সমস্যা সমাধানে সহায়তা করেছে। তবে নিশ্চিত হয়ে নিন যে আপনি এই প্রথম স্ট্যাকওভারফ্লো.com
প্রদর্শন নাম

2
সতর্কতা অবলম্বন করুন, এই কর্মপরিকল্পনাটি ড্রপ ডাউন ক্ষেত্রগুলি এবং ওয়েবভিউতে পাঠ্য নির্বাচন করে বিরতি।
user5507535

2

AppCompat 1.2.0-alpha02 আজ প্রকাশিত হয়েছিল, তাই আপনি ব্যবহার করতে পারেন

implementation 'androidx.appcompat:appcompat:1.2.0-alpha02'

যা ললিপপে ওয়েবভিউ সমস্যা সমাধান করবে।


এটি সমস্যার সমাধান করে তবে এটি আলফা সংস্করণ হওয়ায় এটি অন্যান্য বাগের কারণ হতে পারে। যদি আপনি এটি চেষ্টা করে থাকেন, আপনি কি আপনার অ্যাপ্লিকেশনটিতে অন্য কোনও সমস্যার মুখোমুখি হন নি?
সোহেল

@ সোহেল না, আমি কোনও গ্লিটস অনুভব করিনি। আলফা সংস্করণ অবশ্যই কিছুটা ঝুঁকিপূর্ণ অবশ্যই। উদাহরণস্বরূপ, আলফা02 এর জন্য একটি বাগ এখানে উল্লেখ করা হয়েছে: ইস্যুয়েট্র্যাকার জিআলইউস
দিমিত্রিস পাতাস

2

আমি এই সমস্যাটি একটি নেক্সাস 7 এপিআই 22 তে পুনরুত্পাদন করতে সক্ষম হয়েছি Android টেক্সটটির অ্যান্ড্রয়েড সিস্টেম ওয়েবভিউর সংস্করণ 39 (2237560-হাত) থেকে সংস্করণ 79.0.3945.136 এ আপডেট করে সমস্যাটি স্থির করা হয়েছে

এটি কোনও ব্যবহারকারীর পক্ষে করার জন্য এটি আমার নিয়ন্ত্রণে নেই, তবে যদি আপনি কাউকে তত্ক্ষণাত আপনার অ্যাপ্লিকেশন ব্যবহার করতে সহায়তা করতে চান তবে এটি একটি সমাধান।


1

'Androidx.appcompat: appcompat: 1.0.2' রূপায়ণে ডাউনগ্রেড করে বিষয়টি আমার জন্য সমাধান করা হয়েছিল


1

আমার ক্ষেত্রে সমস্যা ছিল পদ্ধতিতে

fun getUserId(): Int = userId

একটি মেইনএকটিভিটির। আমি জানি না কেন এটি প্রভাবিত করে WebView। ক্লাসের getUserId()ওভাররেড না হয় বা পাবলিক পদ্ধতিও নয় Activity। যদি আমি এই পদ্ধতিটির নাম পরিবর্তন করি বা সরিয়ে ফেলি তবে WebViewএটি খুলতে শুরু করে। পরিবর্তন করার চেষ্টাও করছি

private var userId: Int = 0

প্রতি

var userId: Int = 0
    private set

একই ব্যতিক্রম বাড়ে। আমি বুঝতে করেছিলেন যে যখন একটি ব্যতিক্রম দেখা গেছে: Caused by: java.lang.SecurityException: Permission Denial: null asks to run as user 123456 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL or android.permission.INTERACT_ACROSS_USERS। সেক্ষেত্রে ব্যবহারকারী = 123456 আসলে আমার অনুমোদিত ব্যবহারকারী ছিলেন, এটি কিছু অনুরোধে ব্যবহৃত হয়েছিল, ইন না WebView। আমার সন্দেহ হয় অ্যান্ড্রয়েড userIdতার প্রক্রিয়াগুলির জন্য স্থানীয় ব্যবহারকারী_ হিসাবে ব্যবহার করে।

অনেকে অন্য লোকেদের লক্ষ্য আমরা ব্যবহার করতে পারে appcompat:1.1.0বা 1.0.2এবং প্রসারিত WebViewবর্গ। গুগল প্লে পরিষেবাদিবিহীন এমুলেটরে 21 এ এটি WebViewটেক্সট লেবেলের উপর দীর্ঘ স্পর্শে ক্রাশ হবে তবে সাধারণ ডিভাইসে সমস্ত কিছু ঠিক আছে।


0

কোনও নির্ভরতার সংস্করণ পরিবর্তনের পরিবর্তে আমি প্রোগ্রাম হিসাবে ওয়েবভিউ তৈরির সমাধান হিসাবে সমাধানটি প্রয়োগ করেছি।

সমস্যাটি দেখতে xML ফাইল থেকে পাঠ্য বিন্যাসের সাথে শুরু করার মতো দেখায়। সুতরাং যদি প্রোগ্রামিক পদ্ধতিটি আপনার জন্য কার্যকর সমাধান হয় তবে দয়া করে নমুনা নমুনাটি পরীক্ষা করুন check

private WebView generateWebView(){
    WebView wv = new WebView(YourContext);
    wv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    wv.setFitsSystemWindows(false); // your preferences
    wv.setVerticalScrollBarEnabled(false); // your preferences
    wv.setPadding(15,15,15,15); // your preferences
    return wv;
}

আপনার পিতামাতার দৃশ্যে কেবল যুক্ত করা ছাড়া:

LinearLayout scrollContainer = findViewById(R.id.scrollContainer);
scrollContainer.addView(generateWebView());

-4

সংস্করণ পরীক্ষা করুন। Androidx অ্যাপকম্প্যাট এবং গুগল উপাদান সংস্করণ সর্বদা একই রাখে।

implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation "androidx.cardview:cardview:1.0.0"

এখানে চিত্র বর্ণনা লিখুন


1
আপনার লিঙ্ক করা চিত্রটি পরে অনুপলব্ধ হয়ে উঠলে আপনার উত্তরটিতে সরাসরি কোডটি আটকানো উচিত।
লুই চারেটে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.