【问题标题】:SQLite to ListViewSQLite 到 ListView
【发布时间】:2018-01-31 16:11:28
【问题描述】:

我编写了将一些值放在列表视图中的函数,但应用程序因该错误而崩溃 -

原因:java.lang.NullPointerException:尝试在空对象引用上调用接口方法“int java.util.List.size()”

这里是函数-

    public void SetInList() {
    {
        database = UserInfo_Activity.this.openOrCreateDatabase("Runs", MODE_PRIVATE, null);
        Cursor c = database.rawQuery("SELECT * FROM " +
                TABLE_NAME + "", null);
        try {
            if (c != null) {
                if (c.moveToFirst()) {
                    do {
                        String Date = c.getString(c.getColumnIndex("Date"));
                        int steps = c.getInt(c.getColumnIndex("Steps"));
                        String Time = c.getString(c.getColumnIndex("Time"));
                        double Distance = c.getDouble(c.getColumnIndex("Distance"));


                        Runs.add(Date + "  " + Distance + "  " + Time);
                    } while (c.moveToNext());
                }
            }
        } catch (SQLiteException se) {
            Log.e(getClass().getSimpleName(), se.toString());
        }

        ArrayAdapter <String> adapter = new ArrayAdapter<String>(UserInfo_Activity.this, android.R.layout.simple_expandable_list_item_1, Runs);
        list.setAdapter(adapter);
    }

错误与此行有关-list.setAdapter(adapter); 我不明白为什么

这里是整个班级-

package com.exemple.myapplication;

import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;

import java.util.ArrayList;

public class UserInfo_Activity extends AppCompatActivity {
    SQLiteDatabase database;
    private String TABLE_NAME = "RunningLog";
    private ArrayList<String> Runs;
    private ListView list;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_user_info_);

    ArrayList<String> Runs = new ArrayList<String>();
    list = (ListView) findViewById(R.id.listView);


    database = this.openOrCreateDatabase("Runs", 0, null);
    database.execSQL("CREATE TABLE IF NOT EXISTS " +
            TABLE_NAME +
            " (Date VARCHAR," +
            " Time VARCHAR, steps INT, distance DOUBLE);");

    database.execSQL("DELETE FROM " + TABLE_NAME);
    SetInList();
}

public void SetInList() {
    {
        database = UserInfo_Activity.this.openOrCreateDatabase("Runs", MODE_PRIVATE, null);
        Cursor c = database.rawQuery("SELECT * FROM " +
                TABLE_NAME + "", null);
        try {
            if (c != null) {
                if (c.moveToFirst()) {
                    do {
                        String Date = c.getString(c.getColumnIndex("Date"));
                        int steps = c.getInt(c.getColumnIndex("Steps"));
                        String Time = c.getString(c.getColumnIndex("Time"));
                        double Distance = c.getDouble(c.getColumnIndex("Distance"));


                        Runs.add(Date + "  " + Distance + "  " + Time);
                    } while (c.moveToNext());
                }
            }
        } catch (SQLiteException se) {
            Log.e(getClass().getSimpleName(), se.toString());
        }

        ArrayAdapter <String> adapter = new ArrayAdapter<String>(UserInfo_Activity.this, android.R.layout.simple_expandable_list_item_1, Runs);
        list.setAdapter(adapter);
    }


}
}

【问题讨论】:

    标签: android sqlite listview


    【解决方案1】:

    您再次声明了两个运行,一个是全局的,一个是本地的。只使用全局的。

    所以像这样改变你的代码

    ArrayList<String> Runs = new ArrayList<String>();
    

    新的

    Runs = new ArrayList<String>();
    

    【讨论】:

    • 是的,我做了(在 OnCreate() 上) ArrayList Runs = new ArrayList(); ListView list = (ListView) findViewById(R.id.listView);
    • 如果有帮助请告诉我?
    • Ok 空指针已解决。现在。这可能是另一个新问题。也发布。
    • @NadavKadar 是的,同样的问题。我更新了答案。如果有帮助,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 2015-06-05
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多