0

私はAndroidにかなり慣れていません。前のボタンと進むボタンのクリックでさまざまな文字列を大量に表示するアプリケーションを作成しています。また、assetsフォルダーにデータベースを保存しています..今、Ecilipseでそのデータベースから読み取ってテキストビューに渡す方法について少し混乱しています。また、文字列を 1 つずつ表示することは可能ですか。配列で起こるのと同じように?

DataBaseCreator.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

DBでカーソルを使用してオブジェクトのコレクション(あなたの場合はジョーク)を取得できます。次に、コレクションを反復処理し、インテントを使用してオブジェクト(シリアル化可能)を別のアクティビティに送信できます。

于 2013-04-30T15:39:52.063 に答える
0

これを実行できます: Android: 拡張子が .sqlite のアセット フォルダー sqlite データベース ファイルへのアクセス

これは間違いなくあなたを助けます。確信してます。

編集:

私は今日、時間がありません。したがって、完全なコードを提供することはできませんが、ワイヤーフレームは間違いなく役に立ちます。これが私たちのやり方です:

データを表示しようとしているアクティビティでは、最初に表示したいすべてのデータを取得して arraylist に保存します (仮定: 表示したいデータは 1 つの列のみから取得されます。それ以外の場合は、次のクラスを作成する必要があります)。複数の列の値を格納し、そのクラスの arrayList を作成します。例: クラス Student{int roll_no, String name, int age} を作成する必要がある場合は、student 型の ArrayList を作成する必要があります。ArrayList<Student>)

次に、int var を値 1 で初期化します。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()これを行う前に、データベースからデータをフェッチして、配列リストを埋める必要があります..

これで、アプリケーションを準備するだけで十分だと思います。わかりました...それでも、質問がある場合は、私に尋ねてください。

PS: ここにコードを直接記述したため、コードの入力中にエラーが発生する可能性があります。どこにも入力せずに。ですから訂正してください。そして運が良...

于 2013-04-30T14:11:10.747 に答える