java - 如何根据用户点击检索数据库值

标签 java android sql database android-studio

我制作了一个数据库电影应用程序,它允许用户搜索电影。结果将显示在 ScrollView 中。返回搜索结果后,我希望用户能够单击电影,这将导致一个包含电影完整详细信息的新 Activity 。我该如何去做呢?

所有点击都将导致一项 Activity ,但我需要根据点击的影片显示不同的详细信息。我的数据库中总共有 20 部电影。

MainActivity 上的搜索功能:

    public void search(View v){
    EditText search = (EditText)findViewById(R.id.edtSearch);
    String searchresult = "%" + search.getText().toString() + "%";
    db = new DbHelper(this).getReadableDatabase();
    String[] tblColumns = {"*"};
    String where = "film LIKE ? OR actor LIKE ? OR actor2 LIKE ? OR director LIKE ?";
    String[] args = {searchresult, searchresult, searchresult, searchresult};
    Cursor results = db.query("FILMTABLE", tblColumns, where, args, null, null, null);
    film(results);
}

public void film (Cursor c){

    c.moveToFirst();
    int titleint = c.getColumnIndex("film");
    int id= c.getColumnIndex("id");
    String title = c.getString(titleint);
    int filmID = c.getInt(id);

    TextView txt = new TextView(getApplicationContext());
    txt.setId(filmID);
    txt.setText(title);
    txt.setTextColor(Color.BLACK);
    txt.setTextSize(15);
    txt.setClickable(true);
    txt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(), MainActivity4.class);
            startActivity(intent);
        }
    });

    ScrollView scrollView = (ScrollView)findViewById(R.id.scrolLView);
    scrollView.addView(txt);
}

数据库助手:

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DbHelper extends SQLiteOpenHelper {

    private static final String ID = "id";
    private static final String FILM = "film";
    private static final String ACTOR = "actor";
    private static final String ACTOR2 = "actor2";
    private static final String DIRECTOR = "director";
    private static final String DESCRIPTION = "description";
    private static final String TABLE_NAME = "FILMTABLE";
    private static final String DATABASE_NAME = "filmdatabase3";
    private static final int DATABASE_VERSION = 1;
    private static final boolean FAVOURITE = false;


    public DbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NAME + " (" +
                        ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                        FILM + " TEXT NOT NULL, " +
                        ACTOR + " TEXT NOT NULL, " +
                        ACTOR2 + " TEXT NOT NULL, " +
                        DIRECTOR + " TEXT NOT NULL, " +
                        FAVOURITE + " BOOLEAN, " +
                        DESCRIPTION + " TEXT NOT NULL);"
        );

        Cursor countRows = db.rawQuery("SELECT count(*) FROM FILMTABLE", null);
        countRows.moveToFirst();
        int NumRows = countRows.getInt(0);
        countRows.close();

        if (NumRows == 0) {
            ContentValues values = new ContentValues();


            values.put("film", "Gone Girl");
            values.put("actor", "Ben Affleck");
            values.put("actor2", "Rosamund Pike");
            values.put("director", "David Fincher");
            values.put("description", "description");
            db.insert("FILMTABLE", null, values);
            values.clear();

            values.put("film", "The Hobbit");
            values.put("actor", "Martin Freeman");
            values.put("actor2", "Elijah Wood");
            values.put("director", "Peter Jackson");
            values.put("description", "description");
            db.insert("FILMTABLE", null, values);
            values.clear();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
        onCreate(db);
    }
}

最佳答案

当您开始详细 Activity 时,将影片的 id 放入您正在创建的 Intent 中。

Intent intent = new Intent(getApplicationContext(), MainActivity4.class);
intent.putExtra("FILM_ID_KEY", getSelectedFilmId());
startActivity(intent);

或者制作您的电影 POJO parcelable并再次通过 putExtra 将其放入您的 Intent 中方法。

之后,在 MainActivity4 中使用 getIntent 在 onCreate 中获取这些值方法。

关于java - 如何根据用户点击检索数据库值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28897441/

相关文章:

java - 是否可以序列化hibernate EntityManagerFactory?

java - Maven 不包括 LWJGL 安装的 list 属性

sql - 第一次运行时查询速度极慢,即使有索引

sql - SELECT 间隔,其中间隔数来自表(redshift)

java - 在现有的休息服务中配置 Elastic Search

java - Lucene 多值字段 - 将 TextField 与 StringField 混合

Android 应用程序通知每 15 分钟一次

android facebook sdk v4.0 不工作

android - 获取 espresso 中的某个项目

javascript - 使用 PHP 导出为带有中文字符的 CSV