Ошибка: «Системные службы недоступны для Activity до onCreate ()», даже если я получил функцию onCreate () - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь добавить текст из EditText-Element, нажимая на навигацию. Я попытался исключить доступ к элементу ListView, в который должен быть добавлен текст, в Java-классе, а также инициализировал его в моей основной деятельности. Если я сейчас пытаюсь нажать на кнопку «Отправить», происходит сбой, приводящий к ошибке: «Системные службы недоступны для операций перед onCreate ()». Как я могу это исправить? Я попытался решить ее, изучив похожие вопросы, но не могу понять ... Я также попытался добавить метод onCreate в класс ListViewSDK.

MainActivity:

public class MainActivity extends AppCompatActivity {

    private TextView mTextMessage;

    ListViewSDK LISTVIEW;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
        //LISTVIEW instanz erstellen
        LISTVIEW=new ListViewSDK();
        //Download Last messages
        //Add messages to MessagesList

    }



    private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {

        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.send_button:
                    //Send Message to ServerScript
                    //Initialize Inputfield
                    EditText INPUTFIELD = (EditText) findViewById(R.id.inputfield);
                    String MESSAGE = INPUTFIELD.getText().toString();
                    LISTVIEW.ADD_ITEM(MESSAGE);

                    return true;
            }
            return false;
        }
    };

}

ListViewSDK:

public class ListViewSDK extends ListActivity {

    //ArrayList mit Strings für die Chatanzeige
    ArrayList<String> ITEMS=new ArrayList<String>();
    //Adapter der die Daten der ListView verwaltet
    ArrayAdapter<String> ADAPTER;
    public void onCreate(Bundle icicle){
        super.onCreate(icicle);
        ADAPTER=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,ITEMS);
        setListAdapter(ADAPTER);
    }
    public void ADD_ITEM(String ITEM){
        ITEMS.add(ITEM);
        ADAPTER.notifyDataSetChanged();
    }
}

Activity_main.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:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    <android.support.design.widget.BottomNavigationView
            android:id="@+id/navigation"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginEnd="0dp"
            android:layout_marginStart="0dp"
            android:background="?android:attr/windowBackground"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:menu="@menu/navigation"/>
    <ListView
            android:id="@+id/listview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintBottom_toTopOf="@+id/inputfield"
            tools:layout_editor_absoluteX="8dp" app:layout_constraintBottom_toBottomOf="parent">

    </ListView>
    <EditText android:id="@+id/inputfield" app:layout_constraintBottom_toTopOf="@+id/navigation" android:layout_width="match_parent" android:layout_height="48dp" android:background="@android:color/darker_gray"></EditText>

</android.support.constraint.ConstraintLayout>

navigation.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
            android:id="@+id/send_button"
            android:icon="@drawable/ic_paper_plane"
            android:title="Send"/>

</menu>

1 Ответ

0 голосов
/ 07 ноября 2019

Проблема вызвана созданием экземпляра ListViewSDK в onCreate() вашего MainActivity.

В Android Никогда не называйте конструкторы компонентов Android (Activities, Fragments, Service, ContentProvider, BroadcastReceiver) .
У них есть своисобственные жизненные циклы, и они создаются системой Android. Используйте Intent для их вызова или используйте Context (в зависимости от того, что вам нужно) вместо вызова конструктора.

Дополнительная литература:
1. Введение в Activities
2. Начиная с нового Activities

Кроме того, выможет иметь независимый ListView. Вы не должны создавать его подкласс с Lifecycle, имеющим компонент (например, Activity). Просто получите [Recycler View][3] и с вами все будет в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...