【问题标题】:Display data from database in listview on android在android上的listview中显示数据库中的数据
【发布时间】:2014-08-27 20:11:52
【问题描述】:

我有 3 个班级和数据库

1.class MainActivity

public class MainActivity extends ListActivity {
    private static final String DB_NAME = "sajgo_v1";
    private static final String TABLE_NAME = "PREHRANA";
    private static final String PREHRANA_ID = "_id";
    private static final String NAZIV_PREHRANE = "naziv_prehrane";

    private SQLiteDatabase database;
    private ListView listView;
    private ArrayList<String> prehrana;


    public static final String ID_EXTRA="naziv_prehrane";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        ExternalDbOpenHelper dbOpenHelper = new ExternalDbOpenHelper(this, DB_NAME);
        database = dbOpenHelper.openDataBase();

        fillPrehrana();
        setUpList();      
    }

    private void setUpList() {

        setListAdapter(new ArrayAdapter<String>(this,
                        android.R.layout.simple_list_item_1, prehrana));
        listView = getListView();


        listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                                int position,long id) {
        Intent i = new Intent (MainActivity.this, Jelovnik.class);
        i.putExtra(ID_EXTRA, String.valueOf(id));
        startActivity(i);
            }
        });
    }

    private void fillPrehrana() {
        prehrana = new ArrayList<String>();
        Cursor prehranaCursor = database.query(TABLE_NAME,
                                             new String[] 
                                             {PREHRANA_ID, NAZIV_PREHRANE},
                                             null, null, null, null
                                             , null);
        prehranaCursor.moveToFirst();
        if(!prehranaCursor.isAfterLast()) {
            do {
                String name = prehranaCursor.getString(1);
                prehrana.add(name);
            } while (prehranaCursor.moveToNext());
        }
        prehranaCursor.close();
    }

}

2.类耶洛夫尼克

package com.prehrana;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class Jelovnik extends Activity {

    String passedVar=null;
    private TextView passedView=null;

    protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.jelovnik);

    passedVar=getIntent().getStringExtra(MainActivity.ID_EXTRA);

    passedView=(TextView)findViewById(R.id.passed);

    passedView.setText("Kliknuli ste na " + passedVar);
}
}

在这个类中,当我点击它时,它会显示我的数字

3.类数据库助手

公共类 ExternalDbOpenHelper 扩展 SQLiteOpenHelper {

    public static String DB_PATH;

    public static String DB_NAME;
    public SQLiteDatabase database;
    public final Context context;

    public SQLiteDatabase getDb() {
        return database;
    }

    public ExternalDbOpenHelper(Context context, String databaseName) {
        super(context, databaseName, null, 1);
        this.context = context;

        String packageName = context.getPackageName();
        DB_PATH = String.format("//data//data//%s//databases//", packageName);
        DB_NAME = databaseName;
        openDataBase();
    }


    public void createDataBase() {
        boolean dbExist = checkDataBase();
        if (!dbExist) {
            this.getReadableDatabase();
            try {
                copyDataBase();
            } catch (IOException e) {
                Log.e(this.getClass().toString(), "Copying error");
                throw new Error("Error copying database!");
            }
        } else {
            Log.i(this.getClass().toString(), "Database already exists");
        }
    }

    private boolean checkDataBase() {
        SQLiteDatabase checkDb = null;
        try {
            String path = DB_PATH + DB_NAME;
            checkDb = SQLiteDatabase.openDatabase(path, null,
                    SQLiteDatabase.OPEN_READONLY);
        } catch (SQLException e) {
            Log.e(this.getClass().toString(), "Error while checking db");
        }

        if (checkDb != null) {
            checkDb.close();
        }
        return checkDb != null;
    }


    private void copyDataBase() throws IOException {

        InputStream externalDbStream = context.getAssets().open(DB_NAME);


        String outFileName = DB_PATH + DB_NAME;


        OutputStream localDbStream = new FileOutputStream(outFileName);


        byte[] buffer = new byte[1024];
        int bytesRead;
        while ((bytesRead = externalDbStream.read(buffer)) > 0) {
            localDbStream.write(buffer, 0, bytesRead);
        }

        localDbStream.close();
        externalDbStream.close();

    }

    public SQLiteDatabase openDataBase() throws SQLException {
        String path = DB_PATH + DB_NAME;
        if (database == null) {
            createDataBase();
            database = SQLiteDatabase.openDatabase(path, null,
                SQLiteDatabase.OPEN_READWRITE);
        }
        return database;
    }
    @Override
    public synchronized void close() {
        if (database != null) {
            database.close();
        }
        super.close();
    }
    @Override
    public void onCreate(SQLiteDatabase db) {}
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}

我的问题是

我想在列表视图中调用数据库中的数据

【问题讨论】:

    标签: android database sqlite listview


    【解决方案1】:
    //Create function in DB Class 
    // To Retrive the data from database 
        public Cursor getdata(String table) 
        {
            return sdb.rawQuery("select * from "+table+"", null);
        }
    
    // IN the main Activity 
    setContentView(R.layout.activity_main);
            Mydb db=new MyDb(this);
            db.open();
    Cursor cursor=db.getdata(MyDb.T_Name);
            if(cursor!=null)
            {
                while(cursor.moveToNext())
                {
                    String GetName=cursor.getString(cursor.getColumnIndex(MyDb.name));
                    String GetAddress=cursor.getString(cursor.getColumnIndex(MyDb.address));    
                    al.add(GetName +"    "+  GetAddress);
    
                ArrayAdapter<String> adapter=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1,al);
                lv_view.setAdapter(adapter);
    
    // if u still did not get answer thn u can mail me on: jeetendra.gupta21@gmail.com, i wil send u complete project
    

    【讨论】:

      猜你喜欢
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      相关资源
      最近更新 更多