0

これは私のデータベース コードであり、データベースから名前を取得し、それを別の Java ファイルにある profilelist.jar として下に投稿されたリストビューに表示したいのですが、それができないので、このコードが正しいかどうか教えてください。

package a.vaccination;

import android.annotation.TargetApi;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Build;
import android.util.Log;

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public class datahandler {

    public static final String KEY_ROWID = "id";
    public static final String KEY_name = "name";
    public static final String KEY_dob = "dob";
    public static final String KEY_contact = "contact";
    public static final String KEY_email = "email";
    private static final String TAG = "DBAdapter";

    private static final String DATABASE_NAME = "profile";
    private static final String DATABASE_TABLE = "baby";
    private static final int DATABASE_VERSION = 2;

    private static final String DATABASE_CREATE = "create table if not exists"
            + DATABASE_TABLE
            + "(id integer primary key autoincrement, "
            + "name VARCHAR not null, dob date, contact VARCHAR, email  
VARCHAR);";
    private final Context context;

    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;

    public datahandler(Context ctx) {
        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
    }

    protected static class DatabaseHelper extends SQLiteOpenHelper {
        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
            try {
                db.execSQL(DATABASE_CREATE);
                // db = DBHelper.getWritableDatabase();
                Log.i(DATABASE_NAME, "create");
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
            Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old 
data");
            db.execSQL("DROP TABLE IF EXISTS contacts");
            onCreate(db);
        }
    }

    // ---opens the database---
    public datahandler open() throws SQLException {
        db = DBHelper.getWritableDatabase();
        return this;
    }

    // ---closes the database---
    public void close() {
        DBHelper.close();
    }

    // ---insert a record into the database---
    public long insertRecord(String name, String dob, String contact,
            String email) {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_name, name);
        initialValues.put(KEY_dob, dob);
        initialValues.put(KEY_contact, contact);
        initialValues.put(KEY_email, email);
        Log.i(DATABASE_NAME, "values added");
        return db.insert(DATABASE_TABLE, null, initialValues);

    }

    // ---updates a record---
    public boolean updateRecord(long rowId, String name, String dob,
            String contact, String email) {
        ContentValues args = new ContentValues();
        args.put(KEY_name, name);
        args.put(KEY_dob, dob);
        args.put(KEY_contact, contact);
        args.put(KEY_email, email);
        return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
    }

    public Cursor getAllTitles() {
        return db.query(DATABASE_TABLE, new String[] { KEY_ROWID, KEY_name,
                KEY_dob, KEY_contact, KEY_email }, null, null, null, null,
                null, null);
    }

    // ---retrieves a particular title---

    public Cursor getTitle(long rowId) throws SQLException {
        Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {
                KEY_ROWID, KEY_name, KEY_email, KEY_dob, KEY_contact },
                KEY_ROWID + "=" + rowId, null, null, null, null, null, 
null);
        if (mCursor != null) {
            mCursor.moveToFirst();
        }
        return mCursor;
    }

    public void getReadableDatabase() {
        // TODO Auto-generated method stub
        Cursor cur = db
                .rawQuery("select rowid _id,* from DATABASE_TABLE", null);
    }
}

profilelist.java

package a.vaccination;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

//this shows profies of baby and option of add new one
public class profilelist extends Activity implements OnItemClickListener {

    datahandler db = new datahandler(this);
    SimpleCursorAdapter adapter = null;
    Cursor c;

    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.child);

        Button add = (Button) findViewById(R.id.button1);
        add.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // navigate to create profile
                Intent it = new Intent(profilelist.this, 
createprofile.class);
                startActivity(it);

            }
        });


        db.open();
        Cursor c = db.getAllTitles();
        if (c.moveToFirst()) {
            do {
                DisplayRecord(c);
            } while (c.moveToNext());
        }
        db.close();

        // ---get a Record---
        db.open();
        c = db.getTitle(2);
        if (c.moveToFirst())
            DisplayRecord(c);
        else
            Toast.makeText(this, "No Assignments found", Toast.LENGTH_LONG)
                    .show();
        db.close();

    }

    public void DisplayRecord(Cursor c) {
        // TODO Auto-generated method stub
        Toast.makeText(
                this,
                "id: " + c.getString(0) + "\n" + "name: " + c.getString(1)
                        + "\n" + " dob: " + c.getString(2) + 
"contact"
                        + c.getString(3) + "email" + 
c.getString(4),

                Toast.LENGTH_SHORT).show();
        String[] columns = new String[] { datahandler.KEY_name };
        int[] to = new int[] { R.id.name };
        adapter = new SimpleCursorAdapter(this, R.layout.child, c, columns,
                to, 0);
        ListView names = (ListView) findViewById(R.id.listView1);
        names.setAdapter(adapter);
        names.setOnItemClickListener(this);

    }

a.vaccination.datahandler.getTitle(datahandler.java:115) と a.vaccination.profilelist.onCreate(profilelist.java:67) でエラーが発生しました java.lang.NoSuchMethodError: android.database.sqlite.SQLiteDatabaseb.query上記の profilelist.java と datahandler.java の両方を提供します

@Override public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { // TODO 自動生成されたメソッド スタブ

        Intent i = new Intent(profilelist.this, vaccination.class);
        startActivity(i);
    }


}
4

4 に答える 4

0

最初の質問と2番目の質問の両方に答えるには、「いいえ、このコードは実際には問題ありません」。あなたは本当にローダーの使用を検討する必要があります。あなたが書いたものはほとんどの場合うまくいくかもしれませんが、あなたはあなたのアプリケーションを突然終了させるアプリケーション応答なしエラーを生成する危険性が非常に高いです。UIスレッドでこのようなことをしないでください。

驚くべきAndroidプログラミングがたくさんあります。あなたが自分自身を隅に追いやる前に、それを行う方法についての標準的な本の1つを手に入れることを本当にお勧めします。

于 2013-02-28T17:57:50.983 に答える
0

SimpleCursorAdapter を作成し、それをデータベースのカスタム クエリ選択から返されたカーソルにアタッチする必要があります。カーソルから返されたデータ列は、カスタム ビューにマップされて表示されます。詳細については、ここをクリックし てください。これにより、問題の適切な実装が得られます

于 2016-10-03T19:18:29.493 に答える
0

最近、このタイプの機能を実装しました。基本的に、ListView にデータを表示するには、カスタム BaseAdapter を作成する必要があります。アダプター コンストラクターでは、データを含むオブジェクトの配列を渡します。私が使用したチュートリアルは http://www.vogella.com/articles/AndroidListView/article.htmlです。お役に立てれば!

于 2013-02-28T17:35:46.420 に答える
0

このSimpleCursorAdapter のような CursorAdapter を使用したいとします。ビューIDへの列のマッピングを渡し、バインディングなどを処理します。

于 2013-02-28T18:06:25.100 に答える