从数据库中检索的数据看起来显示为" android.database.sqlite.SQLiteCursor@152ed1d9"而不是文本Android 2.2.3

时间:2017-01-10 17:01:19

标签: android database sqlite android-sqlite

我只编写了几个星期而没有任何经验,所以请原谅愚蠢的问题和可怕的代码!

目标: 单击一个按钮,随机从数据库中提取一些数据并将其显示在TextView中。

挑战: 它似乎从数据库中提取数据,但显示的是以下内容" android.database.sqlite.SQLiteCursor@XXXXXXXX"其中" XXXXXXXX"由数字和字母组成(看起来像十六进制)

这是MainActivity的代码:

package com.example.mat.databaseclick1;

import android.database.Cursor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
Button generate = (Button)findViewById(R.id.Generate);
    generate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            DBHelper myDatabaseHelper = new DBHelper(MainActivity.this);
            myDatabaseHelper.open();
            String text = String.valueOf(myDatabaseHelper.getRProgram());
            myDatabaseHelper.close();
            TextView result2 = (TextView) findViewById(R.id.result2);
            result2.setText(text);
        }
    });

    DBHelper db = new DBHelper(MainActivity.this);
    //---add a program---
        db.open();
    long id = db.insertProgram("Program One");
    id = db.insertProgram("Program Two");
    id = db.insertProgram("Program Three");
    id = db.insertProgram("Program Four");
    db.close();
    db.open();
    Cursor c = db.getRProgram();
    if (c.moveToFirst())
        DisplayProgram(c);
    else
        Toast.makeText(this, "No program found", Toast.LENGTH_LONG).show();
    db.close();
}
public void DisplayProgram(Cursor c)
{
    TextView result = (TextView) findViewById(R.id.result);
    result.setText("id:" + c.getString(0) + "\n" + "Program:" + c.getString(1));
}
}

继承数据库适配器:

package com.example.mat.databaseclick1;

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.util.Log;
import android.widget.TextView;

import static android.R.attr.data;

public class DBHelper {
static final String KEY_ROWID = "_id";
static final String KEY_NAME = "program";
static final String TAG = "DBAdapter";
static final String DATABASE_NAME = "MyDB";
static final String DATABASE_TABLE = "programs";
static final int DATABASE_VERSION = 1;
static final String DATABASE_CREATE =
        "create table programs (_id integer primary key autoincrement, "
                + "program text not null);";
final Context context;
DatabaseHelper DBHelper;
SQLiteDatabase db;

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

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        try {
            db.execSQL(DATABASE_CREATE);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

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


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

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

//---insert a program into the database---
public long insertProgram(String program) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_NAME, program);
    return db.insert(DATABASE_TABLE, null, initialValues);
}

//---deletes a particular program---
public boolean deleteProgram(long rowId) {
    return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}

//---retrieves all the programs---
public Cursor getAllPrograms() {
    return db.query(DATABASE_TABLE, new String[]{KEY_ROWID, KEY_NAME}, null, null, null, null, null);
}

//---retrieves a particular program---
public Cursor getProgram(long rowId) throws SQLException {
    Cursor mCursor =
            db.query(true, DATABASE_TABLE, new String[]{KEY_ROWID,
                            KEY_NAME},
                    KEY_ROWID + "=" + rowId, null,
                    null, null, null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}

//---updates a program---
public boolean updateProgram(long rowId, String program) {
    ContentValues args = new ContentValues();
    args.put(KEY_NAME, program);
    return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
}

//---retrieves random program---
public Cursor getRProgram() {
    Cursor mCursor= db.query(DATABASE_TABLE,null,null,null,null,null,"RANDOM()");
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;

}

//----retrieves random program by click-----

    public String[] clicktogetprog() {

        final String DATABASE_TABLE = "programs";

        String rprogresult;
        String selectQuery = "SELECT * FROM " + DATABASE_TABLE;
        SQLiteDatabase db  = this.DBHelper.getWritableDatabase();
        Cursor cursor      = db.query(selectQuery,null,null,null,null,null,"RANDOM()");
        String data      = ("id:" + cursor.getString(0) + "\n" + "Program:" + cursor.getString(1));

        if (cursor.moveToFirst()) {
            do {

                // get the data into array, or class variable
            } while (cursor.moveToNext());
        }
        cursor.close();
        return new String[]{String.valueOf(data)};
    }
}

任何帮助都将非常感谢!

提前致谢 : - )

1 个答案:

答案 0 :(得分:0)

好吧,只是想出来,它的全部工作。似乎我回来的结果与游标位置有关。

为了纠正它,我打开数据库,然后将光标移动(“d”到数据库中的随机位置。然后我把它调用“DisplayProgram”。在displayprogram中我输入TextView“result2”然后设置“result2”中的文本通过d.getString(0)指定带有d.getString(1)的程序的id。这是MainActivity的工作代码(我没有更改数据库适配器)。 希望它可以帮助其他人:

MainActivity     package com.example.mat.databaseclick1;

import android.database.Cursor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import org.w3c.dom.Text;


public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
Button generate = (Button)findViewById(R.id.Generate);
    generate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            DBHelper myDatabaseHelper = new DBHelper(MainActivity.this);
            myDatabaseHelper.open();
            Cursor d = myDatabaseHelper.getRProgram();
            if (d.moveToFirst());
            DisplayProgram(d);
            myDatabaseHelper.close();

        }
        public void DisplayProgram (Cursor d){
            TextView result2 = (TextView) findViewById(R.id.result2);
            result2.setText("id:" + d.getString(0) + "\n" + "Program:" + d.getString(1));
        }
    });


    DBHelper db = new DBHelper(MainActivity.this);
    //---add a program---
        db.open();
long id = db.insertProgram("Program One");
id = db.insertProgram("Program Two");
id = db.insertProgram("Program Three");
id = db.insertProgram("Program Four");
    db.close();
    db.open();
    Cursor c = db.getRProgram();
    if (c.moveToFirst())
        DisplayProgram(c);
    else
        Toast.makeText(this, "No program found", Toast.LENGTH_LONG).show();
    db.close();
}



public void DisplayProgram(Cursor c)
{
    TextView result = (TextView) findViewById(R.id.result);
    result.setText("id:" + c.getString(0) + "\n" + "Program:" + c.getString(1));
}

}