Ошибка при работе с ListView android
Компиляция кода происходит успешно, но при запуске данной активности приложение вылетает и выдает следующую ошибку:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.pizzaometelly, PID: 6260
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.pizzaometelly/com.example.pizzaometelly.BasketPage}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2718)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
at android.app.Activity.findViewById(Activity.java:2563)
at com.example.pizzaometelly.BasketPage.<init>(BasketPage.java:11)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newActivity(Instrumentation.java:1173)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2708)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Java класс:
package com.example.pizzaometelly;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import androidx.fragment.app.Fragment;
public class BasketPage extends Activity {
String forexampl [] = new String [] {"Vasya" , "Petya", "Marina", "Pizza"};
ListView listView = (ListView) findViewById(R.id.fragment);
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate (savedInstanceState);
setContentView(R.layout.bascket_page);
//ArrayAdapter<String> backetAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,forexampl);
//fragmet.setAdapter(backetAdapter);
}
}
активность xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background_main"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="60sp"
android:background="@drawable/red_top_background"
android:fontFamily="@font/main_name"
android:gravity="center"
android:paddingBottom="9sp"
android:text="@string/OMETELY"
android:textColor="@color/white"
android:textSize="38sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:text="@string/basketCapsEn"
android:gravity="center"
android:textSize="30sp"
android:textColor="#8a0606"
android:fontFamily="@font/test2"/>
<ListView
android:id="@+id/fragment"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
Ответы (2 шт):
Ваша ошибка выглядит так:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
Она вызвана тем что вы пытаетесь инициализировать ваш список до того как загружается наполнение экрана, то есть до этого места setContentView(R.layout.bascket_page);. Попробуйте переместить инициализацию в функцию onCreate():
public class BasketPage extends Activity {
String forexampl [] = new String [] {"Vasya" , "Petya", "Marina", "Pizza"};
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate (savedInstanceState);
setContentView(R.layout.bascket_page);
ListView listView = (ListView) findViewById(R.id.fragment);
//ArrayAdapter<String> backetAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,forexampl);
//fragmet.setAdapter(backetAdapter);
}
}
и наполнение активности будет инициализировано корректно. Дальше вы сможете использовать данный виджет там где вам нужно. Так же адаптер для вашего списка я бы писал таким образом используя ранее объявленный виджет:
listView.setAdapter(backetAdapter);
Здесь очень простой список с пояснениями. Вы все поймете.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:orientation="vertical"
android:minWidth="25dp"
android:minHeight="25dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:padding="5dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listView1"/>
</LinearLayout>
</LinearLayout>
MainActivity.java
//package ru.site.a1;
//здесь должен быть Ваш пакет
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends AppCompatActivity {
private String[] ara = null;
private ListView listView1 = null;
private ArrayAdapter<String> adapter = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//источник данных
ara = new String[] {"red", "green", "blue"};
//список
listView1 = (ListView) findViewById(R.id.listView1);
//адаптер
adapter = new ArrayAdapter<String>(this,R.layout.support_simple_spinner_dropdown_item, ara);
//устанавливаем адаптер для списка
listView1.setAdapter(adapter);
}
}