0

我对Android相当陌生。我正在制作一个应用程序,该应用程序在以前和向前按钮单击时显示大量不同的刺痛。我还有一个存储在资产文件夹中的数据库。现在我对如何在 Ecilipse 中从该数据库中读取 tdo 并将其传递到 textview 感到有些困惑。另外,是否可以一一显示字符串。就像它发生在数组中一样?

数据库创建者.java

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

public class DataBaseCreator extends SQLiteOpenHelper {
    private static String DB_PATH = "/GetInspiredAndHaveFun/assets/Jokes.db";
    private static String DB_NAME = "Jokes.db";
    private static int DB_VERSION = 1;
    public static String DATABASE_TABLE = "myjoke";
    public String temp = "";
    public String[] col;


    private SQLiteDatabase myDataBase;
    private final Context myContext;

    public DataBaseCreator(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
        this.myContext = context;

    }



    public void openDatabase() throws IOException {
        boolean dbe = checkDataBase();
        if (dbe) {
            Log.i("Tag", "dbe" + dbe);

        } else {
            Log.i("Tag", "dbdoesnotexist" + dbe);
            this.getReadableDatabase();
            copyDataBase();

        }

    }

    public void copyDataBase() throws IOException {
        InputStream inp = myContext.getAssets().open(DB_NAME);
        String ofn = DB_PATH + DB_NAME;
        OutputStream oup = new FileOutputStream(ofn);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = inp.read(buffer)) > 0) {
            oup.write(buffer, 0, length);
        }

        oup.flush();
        inp.close();
        oup.close();

    }

    private boolean checkDataBase() {
        SQLiteDatabase checkDB = null;
        try {
            String myPath = DB_PATH + DB_NAME;

            checkDB = SQLiteDatabase.openDatabase(myPath, null,
                    SQLiteDatabase.OPEN_READONLY);
        }

        catch (SQLiteException e) {

        }

        return checkDB != null ? true : false;
    }

    public void openDataBase() throws SQLException {

        // Open the database
        String myPath = DB_PATH + DB_NAME;
        myDataBase = SQLiteDatabase.openDatabase(myPath, null,
                SQLiteDatabase.OPEN_READONLY);
        passText();

    }

    public final String passText() {
        Cursor cursor = myDataBase.query(DATABASE_TABLE, col, null, null,
                null, null, null);
        String[] column = cursor.getColumnNames();
        column=col;


        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            temp += cursor.getString(50);
            cursor.moveToNext();

        }

        return temp;

    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }

}

笑话活动

    import java.io.IOException;

    import android.annotation.TargetApi;
    import android.app.Activity;
    import android.content.Context;
    import android.os.Build;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuInflater;
    import android.view.View;
    import android.widget.ImageButton;
    import android.widget.TextView;
    import android.widget.Toast;




    public class Jokes extends Activity {

        ImageButton bck, fwd, cpy, col;

        TextView t1;

        String[] jok;
        int i, a3;
        TextView nm1;

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

..
...
...
...
..

.

 }

        {

            DataBaseCreator myDbHelper = new DataBaseCreator(this);

            try{
                myDbHelper.copyDataBase();
            } 
            catch (IOException ioe) {
                throw new Error("Unable to create database");
            }

            myDbHelper.openDataBase();



        }

        }
4

2 回答 2

0

您可以通过在数据库中使用游标来获取对象集合(在您的情况下为笑话),然后您可以迭代您的集合并使用意图将对象(可序列化)发送到另一个活动。

于 2013-04-30T15:39:52.063 回答
0

你可以通过这个:Android: Accessing assets folder sqlite database file with .sqlite extension

这肯定会对你有所帮助。我确定。

编辑:

我现在没时间了。所以,我无法为您提供完整的代码,但线框肯定会帮助您。这就是我们的方式:

在您尝试显示数据的活动中,首先获取您要显示的所有数据并将其存储在一个数组列表中(假设:您要显示的数据仅来自单个列,否则,您需要创建一个将存储多个列的值,然后创建该类的arrayList 例如:如果您需要创建一个类 Student{int roll_no, String name, int age},那么您需要创建类型 student 的 ArrayList,ArrayList<Student>)

现在初始化一个值为 1 的 int var,比如说,int index_counter = 1;

现在,您正在以线性方式遍历字符串,因此创建一个参数为整数的函数,您将在其中根据按钮或图像视图单击设置文本。

函数将如下所示:

set_data(int index) { textView.setText(arraylist.get(index)); }

您的onClick()活动将如下所示:

fwd.setOnClickListener(new OnClickListener
public void onClick(View v)
{
index_counter = index_counter + 1;

if(index_counter == arraylist.size)
{
 fwd.setEnabled(false);
}

set_data(indexCounter);
}
);

bck.setOnClickListener(new OnClickListener
public void onClick(View v)
{
index_counter = index_counter - 1;

if(index_counter == 1)
{
 bck.setEnabled(false);
}

set_data(indexCounter);
}
);

你已经完成了......当然,不要忘记打电话set_data(1);onCreate()因为当你第一次参加这个活动时,你需要将 arraylist 中的第一个数据设置为默认显示。在执行此操作之前,应通过从数据库中获取数据来填充您的数组列表。

我认为,现在,您准备申请就足够了。好的...但是即使那样,如果您有任何疑问,您也可以问我。

PS:输入代码时可能会出现一些错误,因为我在这里直接编写了代码。无需在任何地方输入。所以请改正。和古德的运气...

于 2013-04-30T14:11:10.747 回答