![](/img/trans.png)
[英]Displaying ALL data from sqlite database into listview in tabbed activity
[英]Displaying data from sqlite database into listview in fragment activity
作為android開發的新手,我已經在這個問題上停留了幾周了,它變得很累人。
在看完所有教程並閱讀了所有可以找到的問題和答案之后,我仍然無法弄清楚如何使Android Studio僅僅使用SQLite數據庫中的內容並將其內容粘貼到列表視圖中。 我想將數據庫(All_wine.db)中的所有數據顯示到列表視圖(listwine)中。我的應用程序在android studio中正常運行,但該應用程序崩潰了,不幸的是Myapplication
已在nox中停止。
這是我的代碼:
DatabaseHelper.java
package com.example.myapplication;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "All_wine.db";
private static final String DB_TABLE = "All_wine_Table";
//columns
private static final String ID = "ID";
private static final String NAME ="NAME";
private static final String CREATE_TABLE ="CREATE TABLE "+DB_TABLE+" ("+
ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "+
NAME+ " TEXT "+ ")";
public DatabaseHelper(Context context) {
super(context,DB_NAME ,null,1);
}
public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factoty, int version) {
super(context,DB_NAME ,null,1);
}
public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factoty, int version, DatabaseErrorHandler errorHandler) {
super(context,DB_NAME ,null,1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS " +DB_TABLE + "(ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT)");
db.execSQL("INSERT INTO " +DB_TABLE + "(NAME) VALUES ('Mοσχατο ελληνικο ')");
db.execSQL("INSERT INTO " +DB_TABLE + "(NAME) VALUES ('Vin Dux')");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i ,int i1) {
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS "+ DB_TABLE);
onCreate(sqLiteDatabase);
}
public void insertinallwine(String namewine){
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(NAME,namewine);
sqLiteDatabase.insert(DB_TABLE,null,contentValues);
}
//create method to view data
public Cursor viewData(){
SQLiteDatabase db = this.getReadableDatabase();
String query = "Select * from " + DB_TABLE;
Cursor cursor = db.rawQuery(query, null);
return cursor;
}
}
Home_Fragment.java
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Arrays;
import static com.facebook.FacebookSdk.getApplicationContext;
public class Home_Fragment extends Fragment {
DatabaseHelper db ;
ArrayList<String> listItem;
ArrayAdapter adapter;
ListView listwine;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_home, container, false);
// db = new DatabaseHelper(getActivity(),"All_wine.db",null,1);
db = new DatabaseHelper(getContext());
listItem=new ArrayList<>();
listwine=(ListView)getActivity().findViewById(R.id.wine_list);
db.insertinallwine("Samos Grand Cru");
viewData();
return view;
}
private void viewData(){
Cursor cursor=db.viewData();
if(cursor.getCount() == 0) {
Toast.makeText(getContext(),"No data to show",Toast.LENGTH_LONG).show();
}else{
while (cursor.moveToNext()){
listItem.add(cursor.getString(1)); //index 1 is name index 0 is id
}
}
adapter = new ArrayAdapter(getContext(),android.R.layout.simple_list_item_1,listItem);
listwine.setAdapter(adapter);
}
}
fragment_home.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/eoss_samou">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/wine_list"
tools:ignore="InvalidId"/>
</RelativeLayout>
我敢肯定我確實缺少一些愚蠢的東西,但是任何幫助將不勝感激。
我注意到您的代碼中有些奇怪。 這可能是問題。
您的wine_list(ListView)在您的片段中,但是您正在嘗試從活動中訪問它。
嘗試更換
listwine=(ListView)getActivity().findViewById(R.id.wine_list);
與
listwine=(ListView)view.findViewById(R.id.wine_list);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.