簡體   English   中英

在片段活動中將SQLite數據庫中的數據顯示到ListView中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM