Приложение Android вылетает в setContentView в OnCreate только при низком уровне API Android

Мое приложение работает с API 24 и выше, но вылетает с API 19. проблема, похоже, находится в строке setContentView в методе OnCreate.

Я попытался изменить все функции API 21+ в XML-файле Android, но это не помогло. Тоже пробовал поставить multidex и ничего не вышло.

Я добавил сюда метод setContentView:

package com.idan.idanzimbler.epiclogin.view;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import com.idan.idanzimbler.epiclogin.R;
import com.idan.idanzimbler.epiclogin.controller.FillSeriesListFromFireBaseBySearchTask;
import com.idan.idanzimbler.epiclogin.controller.FillSeriesListFromFireBaseBySuggestionsTask;
import com.idan.idanzimbler.epiclogin.controller.FillSeriesListFromFireBaseTask;
import com.idan.idanzimbler.epiclogin.controller.TvSeriesFavoriteList;
import com.idan.idanzimbler.epiclogin.controller.TvSeriesHomeList;
import com.idan.idanzimbler.epiclogin.controller.UsersBookmarks;
import com.idan.idanzimbler.epiclogin.modle.TvSeries;
import com.google.firebase.auth.FirebaseAuth;
import com.squareup.picasso.Picasso;

import java.util.Locale;

public class HomeActivity extends AppCompatActivity implements AbsListView.OnScrollListener {
    public static final String INTENT_FLAG = "flag";
    public static final int FIRST_ENTER = 1;
    //public static final int REBUILD = 2;
    public static final int RECOMMENDATION_ENTER = 2;
    ExpandableListView list;
    EditText searchEt;
    ProgressBar progressBar;
    HomeActivity context;
    ImageView questionmarkHomeBtn;
    boolean isInSearchMode;
    boolean isInRecommendationMode;
    TextView homeToolbarTitleTV;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        loadLocale();
        Toolbar toolbar = findViewById(R.id.homeToolbar);
        toolbar.setTitle("");
        homeToolbarTitleTV = findViewById(R.id.home_titleTV);
        setSupportActionBar(toolbar);
        context = this;
        isInSearchMode = false;
        isInRecommendationMode = false;
        progressBar = findViewById(R.id.home_progressbar);
        questionmarkHomeBtn = findViewById(R.id.home_questionmark_btn);
        list = findViewById(R.id.home_series_list);
        searchEt = findViewById(R.id.home_search_et);
        progressBar.setVisibility(View.VISIBLE);
        TvSeriesHomeList.getInstance().clear();
        TvSeriesFavoriteList.getInstance().clear();
        TvSeriesFavoriteList.getInstance().initializeSeriesList();
        UsersBookmarks.getInstance().initializeBookmarks();
        Bundle b = getIntent().getExtras();
        int flag = 1;
        if (b != null) flag = b.getInt(INTENT_FLAG);
        if (flag == FIRST_ENTER) {
            new FillSeriesListFromFireBaseTask(this, list).execute();
        } else if (flag == RECOMMENDATION_ENTER) {
            progressBar.setVisibility(View.VISIBLE);
            isInRecommendationMode = true;
            homeToolbarTitleTV.setText(getString(R.string.recommendation));
            new FillSeriesListFromFireBaseBySuggestionsTask(context, list).execute();
        }
        list.setOnScrollListener(this);
        list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                TvSeriesFavoriteList favorites = TvSeriesFavoriteList.getInstance();
                TvSeries series = TvSeriesHomeList.getInstance().getSeries().get(position);
                if (favorites.contains(series.getId())) {
                    favorites.remove(series.getId());
                    ImageView star = view.findViewById(R.id.series_list_fav_iv);
                    Picasso.get().load(R.drawable.emptystar).fit().into(star);
                    Toast.makeText(getApplicationContext(), "Removed from favorites", Toast.LENGTH_SHORT).show();
                } else if (favorites.canAdd(series)) {
                    favorites.add(series);
                    ImageView star = view.findViewById(R.id.series_list_fav_iv);
                    Picasso.get().load(R.drawable.filledstar).fit().into(star);
                    Toast.makeText(getApplicationContext(), "Added to favorites", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getApplicationContext(), "Maximum of 5 series can be added to favorites", Toast.LENGTH_SHORT).show();
                }
                return true;
            }
        });
        searchEt.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                String searchString = s.toString().trim();
                if (searchString.isEmpty()) {
                    isInSearchMode = false;
                    TvSeriesHomeList.getInstance().clear();
                    new FillSeriesListFromFireBaseTask(context, list).execute();
                } else {
                    isInSearchMode = true;
                    new FillSeriesListFromFireBaseBySearchTask(context, list, searchString).execute();
                }
            }
        });
        questionmarkHomeBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                AlertDialog.Builder builder  = new AlertDialog.Builder(HomeActivity.this);
                builder.setCancelable(true);
                builder.setTitle(getString(R.string.how_to_use));
                builder.setMessage(getString(R.string.home_fav_bookmark_explain));
                builder.setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dialogInterface.cancel();
                    }
                });
                builder.show();
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        loadLocale();
    }

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        if (!isInSearchMode && !isInRecommendationMode) {
            switch (view.getId()) {
                case R.id.home_series_list:

                    final int lastItem = firstVisibleItem + visibleItemCount;

                    if (lastItem == totalItemCount) {
                        if (TvSeriesHomeList.getInstance().getPreLast() != lastItem) {
                            TvSeriesHomeList.getInstance().incrementPage();
                            new FillSeriesListFromFireBaseTask(this, list).execute();
                            TvSeriesHomeList.getInstance().setPreLast(lastItem);
                        }
                    }
            }
        }
    }


    public ProgressBar getProgressBar() {
        return progressBar;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case R.id.profilemenu:
                startActivity(new Intent(this, ProfileActivity.class));
                break;
            case R.id.favoritesmenu:
                startActivity(new Intent(this, FavoritesActivity.class));
                break;
            case R.id.aboutmenu:
                startActivity(new Intent(this, AboutActivity.class));
                break;
            case R.id.signoutmenu:
                FirebaseAuth.getInstance().signOut();
                Intent intent = new Intent(this, MainActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
                break;
            case R.id.recommendationmenu:
                TvSeriesHomeList.getInstance().clear();
                progressBar.setVisibility(View.VISIBLE);
                isInRecommendationMode = true;
                new FillSeriesListFromFireBaseBySuggestionsTask(context, list).execute();
                homeToolbarTitleTV.setText(getString(R.string.recommendation));
                break;
            case R.id.homemenu:
                if (isInRecommendationMode) {
                    isInRecommendationMode = false;
                    TvSeriesHomeList.getInstance().clear();
                    new FillSeriesListFromFireBaseTask(this, list).execute();
                }
                homeToolbarTitleTV.setText(getString(R.string.home));
                break;
            case R.id.rateusmenu:
                try{
                    startActivity(new Intent(Intent.ACTION_VIEW,
                            Uri.parse("market://details?id=com.idan.idanzimbler.epiclogin")));
                }catch (ActivityNotFoundException e){
                    startActivity(new Intent(Intent.ACTION_VIEW,
                            Uri.parse("https://play.google.com/store/apps/details?id=com.idan.idanzimbler.epiclogin")));
                }
        }
        return true;
    }

    @Override
    public void onBackPressed() {
        if (!searchEt.getText().toString().isEmpty()) {
            searchEt.setText("");
        } else if (isInRecommendationMode) {
            isInRecommendationMode = false;
            TvSeriesHomeList.getInstance().clear();
            new FillSeriesListFromFireBaseTask(this, list).execute();
        }else {
            super.onBackPressed();
        }
    }
    public void setLocale(String lang) {
        Locale locale = new Locale(lang,"US");
        if (lang.equals("he")){
            locale = new Locale(lang,"IL");
        }
        else if (lang.equals("ar")){
            locale = new Locale(lang,"JO");
        }
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());
        SharedPreferences.Editor editor = getSharedPreferences("Settings" ,MODE_PRIVATE).edit();
        editor.putString("My_Lang",lang);
        editor.apply();
    }
    public void loadLocale(){
        SharedPreferences prefs = getSharedPreferences("Settings",Activity.MODE_PRIVATE);
        String language = prefs.getString("My_Lang", "");
        setLocale(language);
    }
}

Файл XML:

<?xml version = "1.0" encoding = "utf-8"?>
<android.support.constraint.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 = ".view.HomeActivity">

    <EditText
        android:id = "@+id/home_search_et"
        android:layout_width = "301dp"
        android:layout_height = "wrap_content"
        android:layout_marginStart = "20dp"
        android:layout_marginTop = "4dp"
        android:layout_marginEnd = "14dp"
        android:layout_weight = "1"
        android:ems = "10"
        android:hint = "@string/enter_tv_series_name"
        android:inputType = "textPersonName"
        app:backgroundTint = "@color/common_google_signin_btn_text_dark_focused"
        app:layout_constraintBottom_toTopOf = "@+id/home_series_list"
        app:layout_constraintEnd_toStartOf = "@+id/home_questionmark_btn"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toBottomOf = "@+id/appBarLayout"
         />

    <android.support.design.widget.AppBarLayout
        android:id = "@+id/appBarLayout"
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:theme = "@style/AppTheme.AppBarOverlay"
        app:layout_constraintBottom_toTopOf = "@+id/home_search_et"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toTopOf = "parent">

        <android.support.v7.widget.Toolbar
            android:id = "@+id/homeToolbar"
            android:layout_width = "match_parent"
            android:layout_height = "?attr/actionBarSize"
            android:background = "?attr/colorPrimary"
            android:contentInsetStart = "0dp"
            android:contentInsetLeft = "0dp"
            android:contentInsetEnd = "0dp"
            android:contentInsetRight = "0dp"
            android:elevation = "2dp"
            android:gravity = "end"
            app:contentInsetEnd = "0dp"
            app:contentInsetLeft = "0dp"
            app:contentInsetRight = "0dp"
            app:contentInsetStart = "0dp"
            app:popupTheme = "@style/AppTheme.PopupOverlay"
            tools:targetApi = "lollipop">

            <TextView
                android:id = "@+id/home_titleTV"
                android:layout_width = "wrap_content"
                android:layout_height = "wrap_content"
                android:layout_gravity = "center"
                android:text = "@string/home"
                android:textColor = "@color/common_google_signin_btn_text_dark_default"
                android:textSize = "25sp"
                android:textStyle = "bold" />
        </android.support.v7.widget.Toolbar>

    </android.support.design.widget.AppBarLayout>

    <ExpandableListView
        android:id = "@+id/home_series_list"
        android:layout_width = "0dp"
        android:layout_height = "0dp"
        android:layout_marginStart = "8dp"
        android:layout_marginEnd = "8dp"
        android:layout_marginBottom = "4dp"
        android:scrollbars = "vertical"
        app:layout_constraintBottom_toBottomOf = "parent"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toBottomOf = "@+id/home_search_et" />

    <ProgressBar
        android:id = "@+id/home_progressbar"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_centerHorizontal = "true"
        android:layout_centerVertical = "true"
        android:indeterminateDrawable = "@drawable/blackprogressbar"
        android:visibility = "invisible"
        app:layout_constraintBottom_toBottomOf = "@+id/home_series_list"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toTopOf = "parent" />

    <ImageView
        android:id = "@+id/home_questionmark_btn"
        android:layout_width = "34dp"
        android:layout_height = "24dp"
        android:layout_marginEnd = "16dp"
        app:layout_constraintBottom_toBottomOf = "@+id/home_search_et"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintTop_toTopOf = "@+id/home_search_et"
        app:srcCompat = "@drawable/questionmarklogo"
        android:contentDescription = "TODO" />

</android.support.constraint.ConstraintLayout>

бег:

V/FA: Activity paused, time: 2504321
V/FA: onActivityCreated
D/FA: Logging event (FE): user_engagement(_e), Bundle[{firebase_event_origin(_o)=auto, engagement_time_msec(_et)=11068, firebase_screen_class(_sc)=MainActivity, firebase_screen_id(_si)=-8684354233398184439}]
W/dalvikvm: JNI WARNING: NewStringUTF input is not valid Modified UTF-8: illegal start byte 0xf0
             string: 'en_Latn_US_�_US'
             in Llibcore/icu/ICU;.addLikelySubtags:(Ljava/lang/String;)Ljava/lang/String; (NewStringUTF)
I/dalvikvm: "main" prio=5 tid=1 NATIVE
      | group = "main" sCount=0 dsCount=0 obj=0xa4d56bd8 self=0xb7e34eb0
      | sysTid=3387 nice=0 sched=0/0 cgrp=apps handle=-1216573376
      | state=R schedstat=( 1431490769 212065377 2672 ) utm=91 stm=51 core=1
I/dalvikvm:   #00  pc 000bd936  /system/lib/libdvm.so (dvmDumpNativeStack(DebugOutputTarget const*, int)+86)
      #01  pc 00098513  /system/lib/libdvm.so (dvmDumpThreadEx(DebugOutputTarget const*, Thread*, bool)+1155)
      #02  pc 00098806  /system/lib/libdvm.so (dvmDumpThread(Thread*, bool)+86)
      #03  pc 0004d3ff  /system/lib/libdvm.so (ScopedCheck::checkUtfString(char const*, bool)+271)
      #04  pc 0004e2ad  /system/lib/libdvm.so (ScopedCheck::check(bool, char const*, ...)+1437)
      #05  pc 00052927  /system/lib/libdvm.so
      #06  pc 000204be  /system/lib/libjavacore.so
      #07  pc 0002a4ab  /system/lib/libdvm.so (dvmPlatformInvoke+79)
    at libcore.icu.ICU.addLikelySubtags(Native Method)
I/dalvikvm:     at android.text.TextUtils.getLayoutDirectionFromLocale(TextUtils.java:1740)
    at android.content.res.Configuration.setLayoutDirection(Configuration.java:1295)
    at android.content.res.Configuration.updateFrom(Configuration.java:820)
    at android.content.res.Resources.updateConfiguration(Resources.java:1557)
    at android.content.res.Resources.updateConfiguration(Resources.java:1511)
    at android.support.v7.widget.ResourcesWrapper.updateConfiguration(ResourcesWrapper.java:232)
    at android.content.res.Resources.<init>(Resources.java:202)
    at android.content.res.Resources.<init>(Resources.java:179)
    at android.support.v7.widget.ResourcesWrapper.<init>(ResourcesWrapper.java:48)
    at android.support.v7.widget.TintResources.<init>(TintResources.java:35)
    at android.support.v7.widget.TintContextWrapper.<init>(TintContextWrapper.java:101)
    at android.support.v7.widget.TintContextWrapper.wrap(TintContextWrapper.java:69)
    at android.support.v7.widget.AppCompatEditText.<init>(AppCompatEditText.java:69)
    at android.support.v7.widget.AppCompatEditText.<init>(AppCompatEditText.java:65)
    at android.support.v7.app.AppCompatViewInflater.createEditText(AppCompatViewInflater.java:192)
    at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:114)
    at android.support.v7.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1266)
    at android.support.v7.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1316)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:684)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
    at android.support.v7.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469)
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
    at com.idan.idanzimbler.epiclogin.view.HomeActivity.onCreate(HomeActivity.java:58)
    at android.app.Activity.performCreate(Activity.java:5231)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
    at android.app.ActivityThread.access$800(ActivityThread.java:135)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5001)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
    at dalvik.system.NativeStart.main(Native Method)
E/dalvikvm: VM aborting
A/libc: Fatal signal 6 (SIGABRT) at 0x00000d3b (code=-6), thread 3387 (mbler.
Application terminated. 

Попробуйте удалить оттенок, вес и em в EditText

cutiko 16.01.2019 02:14

@cutiko попытался удалить их сейчас, но все равно не работает.

Idan Zimbler 16.01.2019 02:24

Я думаю, что на панели инструментов есть дополнения, такие как contentInsetLeft и инструменты api target

cutiko 16.01.2019 03:25

@cutiko Я попытался удалить их все, но все еще вылетает только на api 19.

Idan Zimbler 18.01.2019 15:40

Не могли бы вы изменить логарифм на Error и снова выполнить поиск по нему, возможно, это не настоящая ошибка. Он должен иметь своего рода ссылку (например, подчеркнутую синим цветом веб-ссылку) на строку с ошибкой.

cutiko 18.01.2019 15:54

Строка синего цвета ведет к строке в OnCreate с setContentView (), которая является ошибкой.

Idan Zimbler 19.01.2019 18:43
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
6
459
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, что трассировка стека указывает на проблему с чтением текущей конфигурации ресурсов (независимо от того, является ли ваш языковой стандарт RTL или нет).

Глядя на код активности, вы изменяете языковой стандарт, используемый вашим приложением, вместо использования языкового стандарта телефона, который объясняет проблему. Ваша Activity фактически будет дважды проходить через onCreate. В первый раз, вероятно, без проблем раздувается ваше XML-представление, но как только вы установите новую конфигурацию (путем вызова loadLocale()), действие будет уничтожено и воссоздано заново, что приведет к повторному выполнению onCreate() с вашей новой конфигурацией. Это когда ваше приложение вылетает.

На мой взгляд, проблема, скорее всего, в методе setLocale(), изменение конфигурации выполняется неправильно, и новые API-интерфейсы могут использовать значение по умолчанию, тогда как старые API-интерфейсы просто дают сбой.

Хотя я бы не рекомендовал изменять языковой стандарт в приложении, вот дополнительная информация об изменении его в приложении для Android:
https://proandroiddev.com/change-language-programmatically-at-runtime-on-android-5e6bc15c758

Существуют разные методы, которые можно использовать в зависимости от версии поддерживаемых вами API.

Метод, который он использует для изменения конфигурации, выглядит так:

    private static Context updateResources(Context context, Locale locale) {
        Locale.setDefault(locale);

        Resources res = context.getResources();
        Configuration config = new Configuration(res.getConfiguration());
        if (Build.VERSION.SDK_INT >= 17) {
            config.setLocale(locale);
            context = context.createConfigurationContext(config);
        } else {
            config.locale = locale;
            res.updateConfiguration(config, res.getDisplayMetrics());
        }
        return context;
    }

Жюльен Арзул. Я попробовал функцию updateResources вместо своих 4 строк в setLocale от Locale.setdeafult (locale) до getBaseContext.getResources .... И она по-прежнему работает на api 24, но не на api 19.

Idan Zimbler 18.01.2019 15:14

Возможно, я ошибаюсь насчет происхождения аварии. Если вы хотите убедиться, что это связано с изменением локали в конфигурации, вы должны прокомментировать все ваши вызовы loadLocale(); и снова протестировать API 19. Если сбой исчезнет, ​​это будет означать, что я прав, но если он все еще происходит, вам следует взглянуть на другие части вашего кода

Julien Arzul 21.01.2019 03:19

Он по-прежнему вылетает на api 19 даже после того, как я прокомментировал loadLocale (). Думаю, я просто поменяю minSdk на 21+ и все.

Idan Zimbler 22.01.2019 16:25

Другие вопросы по теме