Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从sqlite数据库获取数据并放入可扩展列表?_Android_Sqlite_Android Sqlite - Fatal编程技术网

Android 从sqlite数据库获取数据并放入可扩展列表?

Android 从sqlite数据库获取数据并放入可扩展列表?,android,sqlite,android-sqlite,Android,Sqlite,Android Sqlite,我在sqlite数据库中的不同表中存储了一些数据。例如,我从table name main_category中获取教程标题,从table tutorials中获取教程描述,并希望在可展开的listview中显示它们。但我得到了一个空指针异常。 这是我从sqlite数据库获取值的代码 public List<String> getTutNames() { List<String> list = new ArrayList<>(); Cursor

我在sqlite数据库中的不同表中存储了一些数据。例如,我从table name main_category中获取教程标题,从table tutorials中获取教程描述,并希望在可展开的listview中显示它们。但我得到了一个空指针异常。 这是我从sqlite数据库获取值的代码

 public List<String> getTutNames() {
    List<String> list = new ArrayList<>();
    Cursor cursor = database.rawQuery("Select cat_name From main_category;", null);
    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        list.add(cursor.getString(0));
        cursor.moveToNext();
    }
    cursor.close();
    return list;
}

public List<String> getTutDes() {
    List<String> list = new ArrayList<>();
    Cursor cursor = database.rawQuery("Select tut_detail From tutorials;", null);
    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        list.add(cursor.getString(0));
        cursor.moveToNext();
    }
    cursor.close();
    return list;
}
public List getTutNames(){
列表=新的ArrayList();
Cursor Cursor=database.rawQuery(“从主类别中选择类别名称”,空);
cursor.moveToFirst();
而(!cursor.isAfterLast()){
list.add(cursor.getString(0));
cursor.moveToNext();
}
cursor.close();
退货清单;
}
公共列表getTutDes(){
列表=新的ArrayList();
Cursor Cursor=database.rawQuery(“从教程中选择tut_详细信息;”,null);
cursor.moveToFirst();
而(!cursor.isAfterLast()){
list.add(cursor.getString(0));
cursor.moveToNext();
}
cursor.close();
退货清单;
}
这是我把它放在可扩展列表视图中的代码

public class Main2Activity extends AppCompatActivity {

ExpandableListAdapter listAdapter;
ExpandableListView elv;
List<String> listDataHeader;
List<String> listChild;
HashMap<String, List<String>> listDataChild;

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

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    elv = (ExpandableListView) findViewById(R.id.elv);

    DatabaseAccess db = DatabaseAccess.getInstance(this);
    db.open();
    listDataHeader = db.getTutNames();
    listChild = db.getTutDes();
    db.close();

    for (int i=0; i<listDataHeader.size();i++) {
        listDataChild.put(listDataHeader.get(i), listChild);
    }

    listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);
    elv.setAdapter(listAdapter);

}

}
公共类Main2活动扩展了AppCompative活动{
可扩展列表适配器;
可扩展列表视图elv;
列表列表数据头;
列出清单儿童;
HashMapListDataChild;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
elv=(ExpandableListView)findViewById(R.id.elv);
DatabaseAccess db=DatabaseAccess.getInstance(this);
db.open();
listDataHeader=db.getTutNames();
listChild=db.getTutDes();
db.close();
对于(inti=0;i试试这个!可能会有帮助

并在检索数据时检查logcat

public List<String> getTutNames() {
    List<String> list = new ArrayList<>();
    Cursor cursor = database.rawQuery("Select cat_name From main_category;", null);
    if(cursor.getCount() > 0){
        while (cursor.moveToNext()){
            list.add(cursor.getString(0));
        }
    }
    cursor.moveToFirst();
    return list;
}

public List<String> getTutDes() {
    List<String> list = new ArrayList<>();
    Cursor cursor = database.rawQuery("Select tut_detail From tutorials;", null);
    if(cursor.getCount() > 0) {
        while (cursor.moveToNext()) {
            list.add(cursor.getString(0));
        }
    }
    return list;
}
public List getTutNames(){
列表=新的ArrayList();
Cursor Cursor=database.rawQuery(“从主类别中选择类别名称”,空);
if(cursor.getCount()>0){
while(cursor.moveToNext()){
list.add(cursor.getString(0));
}
}
cursor.moveToFirst();
退货清单;
}
公共列表getTutDes(){
列表=新的ArrayList();
Cursor Cursor=database.rawQuery(“从教程中选择tut_详细信息;”,null);
if(cursor.getCount()>0){
while(cursor.moveToNext()){
list.add(cursor.getString(0));
}
}
退货清单;
}

也许您的查询数据库需要一些时间。您可以在使用时将synchronized to方法和检查列表null添加到中。

Mohammad nabil,我尝试过,但仍然没有成功。此行出现NullpointerException。对于(int i=0;i@SilentCoder然后在初始化listDataChild的地方,我在代码中看不到初始化。@Pavan,很抱歉,我本来应该编写listDataHeader.size()。现在我编辑了我的代码。仍然是NullpointerException,但现在在第41行。listDataChild.put(listDataHeader.get(i),listChild)@SilentCoder显然你会得到这个结果,因为listDataChild在使用initialize之前是空的it@Pavan,thanx bro。我在初始化它后使它工作。thanx bro。你能回答这个问题吗?好的。等我编码。我的项目也许能帮你!