Я борется с заселением ListView в андроиде какое-то время. Может кто-нибудь, пожалуйста, дайте мне руку здесь?Android ListView Null Pointer exception
Итак, я сохранил данные в базе данных в 2 разных таблицах. Один для настроек и один для данных, которые будут отображаться в спискеView. Но, наблюдая за множеством учебников, у меня все время возникают проблемы с заполнением списка. Я даю вам код, и надеюсь, вы, ребята, можете помочь мне решить проблему.
MainActivity:
public class MainActivity extends AppCompatActivity {
//private ArrayList<String> arrayList;
public ListView viewEvents;
DataHandler dataBase;
private ListView listView;
// SQLiteDatabase data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.ElementsView);
dataBase = new DataHandler(this);
showList();
}
public void showList() {
try{
ArrayList<ListDisplayItems> displayList = new ArrayList<ListDisplayItems>();
//dataBase.open();
displayList.clear();
//String query = "SELECT * FROM " + DataHandler.DATABASE_TABLE_DISPLAY;
Cursor c1 = DataHandler.displayQuery();
// Cursor c1 = data.rawQuery(query, null);
if (c1 != null && c1.getCount() != 0) {
if (c1.moveToFirst()) {
do {
ListDisplayItems listDisplayItems = new ListDisplayItems();
listDisplayItems.SetTime(c1.getString(c1
.getColumnIndex(DataHandler.KEY_TIME_TEXT)));
listDisplayItems.SetName(c1.getString(c1
.getColumnIndex(DataHandler.KEY_NAME)));
listDisplayItems.SetDays(c1.getString(c1
.getColumnIndex(DataHandler.KEY_DAYS_OF_WEEK_TEXT)));
displayList.add(listDisplayItems);
} while (c1.moveToNext());
}
}
c1.close();
//dataBase.close();
DisplayListAdapter displayListAdapter = new DisplayListAdapter(
MainActivity.this, displayList);
listView.setAdapter(displayListAdapter);
}catch(Exception e){
e.printStackTrace();
}
}
DisplayListAdapter Класс:
DataHandler database;
Context context;
ArrayList<ListDisplayItems> displayList;
public DisplayListAdapter(Context context, ArrayList<ListDisplayItems> list) {
this.context = context;
displayList = list;
}
@Override
public int getCount() {
return displayList.size();
}
@Override
public Object getItem(int position) {
return displayList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup arg2) {
ListDisplayItems displayItemsList = displayList.get(position);
if (convertView == null){
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.item_layout, null);
}
TextView textTime = (TextView) convertView.findViewById(R.id.itextTime);
textTime.setText(displayItemsList.GetTime());
TextView textName = (TextView) convertView.findViewById(R.id.itextName);
textName.setText(displayItemsList.GetName());
TextView textDays = (TextView) convertView.findViewById(R.id.itextDays);
textDays.setText(displayItemsList.GetDays());
return convertView;
}
}
ListDisplayItems Класс:
public class ListDisplayItems {
String iName;
String iIconRing;
String iIconAlarm;
String iTimeText;
String iDaysOfWeek;
public String GetName()
{
return iName;
}
public void SetName(String Name)
{
this.iName = Name;
}
public String GetIconRing()
{
return iIconRing;
}
public void SetIconRing(String Icon)
{
this.iIconRing = Icon;
}
public String GetIconAlarm()
{
return iIconAlarm;
}
public void SetIconAlarm(String Icon)
{
this.iIconAlarm = Icon;
}
public String GetTime()
{
return iTimeText;
}
public void SetTime(String Time)
{
this.iTimeText = Time;
}
public String GetDays()
{
return iDaysOfWeek;
}
public void SetDays(String Days)
{
this.iDaysOfWeek = Days;
}
}
И мой DataHandler Класс:
public class DataHandler{
public static final String KEY_EXAMPLE = "example_of_my_keys";
static DbHelper dbhelper;
Context ctx;
static SQLiteDatabase dataBase;
public DataHandler(Context ctx){
this.ctx = ctx;
dbhelper = new DbHelper(ctx);
}
public static Cursor displayQuery() {
Cursor c1 = null;
try {
if (dataBase.isOpen()) {
dataBase.close();
}
String[] projection = {
KEY_NAME,
KEY_TIME_TEXT,
KEY_DAYS_OF_WEEK_TEXT,
};
String sortOrder =
KEY_ROWID + " ASC";
dataBase = dbhelper.getWritableDatabase();
//c1 = dataBase.rawQuery(query, null);
c1 = dataBase.query(
DATABASE_TABLE_DISPLAY, // The table to query
projection, // The columns to return
null, // The columns for the WHERE clause
null, // The values for the WHERE clause
null, // don't group the rows
null, // don't filter by row groups
sortOrder // The sort order
);
} catch (Exception e) {
System.out.println("DATABASE ERROR " + e);
}
return c1;
}
private class DbHelper extends SQLiteOpenHelper{
.....code creating tables and stuff///
}
}
public DataHandler open()
{
dataBase = dbhelper.getWritableDatabase();
return this;
}
public void close()
{
dbhelper.close();
}
}
Я создал пользовательский макет представления для listView с установленными значками. Ошибок нет. Я получаю только обработанное исключение NullPointer и ничего не отображается в моем списке.
Вот мой журнал:
01-30 14: 27: 08,641: E/Трейс (656): Ошибка при открытии файла трассировки: Нет такого файл или каталог (2) 01-30 14: 27: 09.419: W/dalvikvm (656): VFY: невозможно найти класс, на который делается ссылка в подписи (Landroid/view/SearchEvent;) 01-30 14: 27: 09.419: I/dalvikvm (656): Не удалось найти метод android.view.Window $ Callback.onSearchRequested, ссылка на метод android.support.v7.view.WindowCallbackWrapper.onSearchRequested 01-30 14: 27: 09.429: W/dalvikvm (656): VFY: не удается разрешить метод интерфейса 14535: Landroid/view/Window $ Callback; .onSearchRequested (Landroid/view/SearchEvent;) Z 01-30 14: 27: 09.429: D/dalvikvm (656): VFY: замена кода операции 0x72 на 0x0002 01-30 14: 27: 09,439: I/dalvikvm (656): не удалось найти метод android.view.Window $ Callback.onWindowStartingActionMode, ссылочных от метода android.support.v7.view.WindowCallbackWrapper.onWindowStartingActionMode 01-30 14 : 27: 09.459: W/dalvikvm (656): VFY: не удалось разрешить интерфейс метод 14539: Landroid/view/Window $ Callback; .onWindowStartingActionMode (Landroid/view/ActionMode $ Callback; I) Landroid/view/ActionMode ; 01-30 14: 27: 09.459: D/dalvikvm (656): VFY: замена кода операции 0x72 на 0x0002 01-30 14: 27: 09.989: I/dalvikvm (656): Не удалось найти метод android.view. ViewGroup.onRtlPropertiesChanged, ссылается на метод android.support.v7.widget.Toolbar.onRtlPropertiesChanged 01-30 14: 27: 09.989: W/dalvikvm (656): VFY: невозможно разрешить виртуальный метод 14435: Landroid/view/ViewGroup; .onRtlPropertiesChanged (I) V 01-30 14: 27: 09.989: D/dalvikvm (656): VFY: замена кода операции 0x6f на 0x0007 01-30 14: 27: 10.069: I/dalvikvm (656): возможно не найти метод android.content.res.TypedArray.getChangingConfigurations, ссылка от метода android.support.v7.widget.TintTypedArra y.getChangingConfigurations 01-30 14:27:10.069: W/dalvikvm (656): VFY: не удалось разрешить виртуальный метод 418: Landroid/content/res/TypedArray; .getChangingConfigurations () I 01-30 14: 27: 10.079: D/dalvikvm (656): VFY : замена кода операции 0x6e на 0x0002 01-30 14: 27: 10.109: I/dalvikvm (656): Не удалось найти метод android.content.res.TypedArray.getType, ссылающийся на метод android.support.v7.widget. TintTypedArray.getType 01-30 14: 27: 10.109: W/dalvikvm (656): VFY: невозможно разрешить виртуальный метод 440: Landroid/content/res/TypedArray; .getType (I) I 01-30 14:27 : 10.129: D/dalvikvm (656): VFY: замена кода операции 0x6e на 0x0002 01-30 14: 27: 10.429: I/System.out (656): ОШИБКА БАЗЫ ДАННЫХ java.lang.NullPointerException 01-30 14: 27: 10,429: W/System.err (656): java.lang.NullPointerException 01-30 14: 27: 10.439: W/System.err (656): at com.teosoft.mutetimer.MainActivity.showList (MainActivity.java:55) 01-30 14: 27: 10.439: W/System.err (656): at com.teosoft.mutetimer.MainActivity.onCreate (MainActivity.java:27) 01-30 14: 27: 10.449: W/System. err (656): at android.app.Activity.performCreate (Activity.java:5008) 01-30 14: 27: 10.449: W/System.err (656): at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1079) 01-30 14: 27: 10.479: W/System.err (656): at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2023) 01-30 14: 27: 10.479 : W/System.err (656): при android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2084) 01-30 14: 27: 10.499: W/System.err (656): at android.app.ActivityThread.access $ 600 (ActivityThread.java:130) 01-30 14: 27: 10.540: W/System.err (656): at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1195) 01-30 14: 27: 10.549: W/System.err (656): at android.os.Handler.dispatchMessage (Handler.java:99) 01-30 14: 27: 10.559: W/System.err (656): at android.os.Looper. (Looper.java:137) 01-30 14: 27: 10.559: W/System.err (656): at android.app.ActivityThread.main (ActivityThread.java:4745) 01-30 14:27 : 10,589: W/System.err (656): при java.lang.reflect.Method.invokeNative (родной метод) 01-30 14: 27: 10.589: W/System.err (656): at java.lang.reflect.Method.invoke (Method.java:511)) 01-30 14: 27: 10.589: W/System.err (656): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:786) 01-30 14:27: 10.609: W/System.err (656): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:553) 01-30 14: 27: 10.609: W/System.err (656): на dalvik.system.NativeStart.main (родной метод) 01-30 14: 27: 10.889: D/dalvikvm (656): GC_CONCURRENT освобожден 197K, 3% бесплатно 11034K/11335K, приостановлено на 115 мс + 53 мс, всего 392 мсек 01 -30 14: 27: 11.949: I/Хореограф (656): пропущен 109 кадров s! Приложение может быть , делая слишком много работы над своей основной нитью. 01-30 14: 27: 12.029: D/gralloc_goldfish (656): обнаружен эмулятор без эмуляции графического процессора.
Извините за длинный пост. Я новичок.:)
Возможный дубликат [Что такое Исключение нулевого указателя и как его исправить?] (Http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how -do-i-fix-it) – 0X0nosugar