gpt4 book ai didi

java - 如何从 DbHandler 外部调用变量?

转载 作者:行者123 更新时间:2023-12-01 19:59:22 25 4
gpt4 key购买 nike

就我而言,我有 DbHandler.java 和 ActivityKategori.java。

我的问题是在DbHandler.java,我有查询条件

SELECT * FROM TBL_**** WHERE COLUMN1 = 'VARIABEL_FROM_ACT_KATEGORI' "

那就是变量值来自 bundle :D

我已经做了很多改变,但没有解决任何问题。

这是完整的代码

ActivityKategori.java

此 Activity 是从 bundle 中获取数据并将其值发送到 DBHandler 以获取 SQL CONDITION

我知道有人会建议使用SharedPreference,但我对此感到困惑。

现在,我想学习使用Bundle或Intents传递

package ptacs.ekatalog.com.e_katalogproduk.activity;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

import ptacs.ekatalog.com.e_katalogproduk.R;
import ptacs.ekatalog.com.e_katalogproduk.adapter.KategoriAdapter;
import ptacs.ekatalog.com.e_katalogproduk.helper.Constant;
import ptacs.ekatalog.com.e_katalogproduk.helper.DBHandler;
import ptacs.ekatalog.com.e_katalogproduk.helper.RecyclerItemClickListener;
import ptacs.ekatalog.com.e_katalogproduk.model.Produk;

public class ActivityKategori extends AppCompatActivity {

private SwipeRefreshLayout swLayout2;
private LinearLayout llayout2;
private RecyclerView recyclerView;
private LinearLayoutManager layoutManager;
private KategoriAdapter adapter;
private DBHandler dbHandler;
private List<Produk> kategoriList = new ArrayList<>();
private TextView tv1;
String mMerkProduk;

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

initRecyclerView();
cekDataRecyclerView();


if (getIntent().getExtras() != null) {
Bundle bundle = getIntent().getExtras();
mMerkProduk = bundle.getString(Constant.BUNDLE_MERK_PRODUK); //MERK kategori

//Toolbar
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
setTitle(mMerkProduk);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
dbHandler = new DBHandler(this);
}

//dbHandler.getKategoryProduk(mMerkProduk);
}
private void initRecyclerView(){

recyclerView = (RecyclerView) findViewById(R.id.rv_kategori);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
dbHandler = new DBHandler(ActivityKategori.this);
kategoriList = dbHandler.getKategoryProduk(mMerkProduk); //GET VALUE STRING
//kategoriList = dbHandler.getKategoryProduk(); //OLD CODE to GET OBJECT
adapter = new KategoriAdapter(kategoriList);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}




private void cekDataRecyclerView() {

if (adapter.getItemCount() == 0) {
recyclerView.setVisibility(View.GONE);
} else {
recyclerView.setVisibility(View.VISIBLE);

recyclerView.addOnItemTouchListener(
new RecyclerItemClickListener(getApplicationContext(), new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
// TODO Handle item click

Bundle bundle = new Bundle();

//COMMIT MAS INDRA CS

bundle.putString(Constant.BUNDLE_JENIS_PRODUK, adapter.getItem(position).getJenis_produk());

Intent intent = new Intent(ActivityKategori.this, ActivityList.class);
intent.putExtras(bundle);
startActivity(intent);

}
})
);
}

swLayout2 = (SwipeRefreshLayout) findViewById(R.id.sw_layout2);
llayout2 = (LinearLayout) findViewById(R.id.ll_Layout);

//Mengeset warna yang berputar
swLayout2.setColorSchemeResources(R.color.colorAccent,R.color.colorPrimary);

//Setting Listener yang akan dijalankan saat layar difresh
swLayout2.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
refreshItem();
}
void refreshItem(){
initRecyclerView();
cekDataRecyclerView();
onItemLoad();
}
void onItemLoad(){
swLayout2.setRefreshing(false);
}
});
}

}

ActivityKategori.java

package ptacs.ekatalog.com.e_katalogproduk.helper;

/**
* Created by Maxoto on 1/15/2018.
*/

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

import java.util.ArrayList;
import java.util.List;

import ptacs.ekatalog.com.e_katalogproduk.model.Produk;

public class DBHandler extends SQLiteOpenHelper {

private static final int DATABASE_VERSION = 2;
private static final String DATABASE_NAME = "db_ekatalog"; // NAMA DATABASE
private static final String TABLE_PRODUK = "tb_produk"; // NAMA TABEL
private static final String COLUMN_ID = "id_produk"; // NAMA KOLOM ID
private static final String COLUMN_KD = "kd_produk"; // KODE PRODUK
private static final String COLUMN_NAMA = "nama_produk"; // NAMA KOLOM NAMA
private static final String COLUMN_MERK = "merk_produk"; //MERK PRODUK
private static final String COLUMN_JENIS = "jenis_produk"; //JENIS PRODUK
private static final String COLUMN_VARIASI = "variasi_produk"; //VARIASI PRODUK
private static final String COLUMN_FOTO = "foto_produk"; // FOTO PRODUK

public DBHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// TODO : LANJUT SECTION 2
// FUNGSI UNTUK MEMBUAT DATABASENYA
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_USER_TABLE = "CREATE TABLE "
+ TABLE_PRODUK +
"(" + COLUMN_ID + " INTEGER PRIMARY KEY,"
+ COLUMN_KD + " TEXT,"
+ COLUMN_NAMA + " TEXT, "
+ COLUMN_MERK + " TEXT, "
+ COLUMN_JENIS + " TEXT, "
+ COLUMN_VARIASI + " TEXT, "
+ COLUMN_FOTO + " TEXT" + ")";
db.execSQL(CREATE_USER_TABLE);
}

// FUNGSI UNTUK MENGECEK DATABASE ADA ATAU TIDAK.
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_PRODUK);
onCreate(db);
}

// FUNGSI UNTUK TAMBAH DATA PRODUK
public void tambahProduk(Produk produk){
SQLiteDatabase db = this.getWritableDatabase();

ContentValues values = new ContentValues();
values.put(COLUMN_KD, produk.getKd_produk());
values.put(COLUMN_NAMA, produk.getNama_produk());
values.put(COLUMN_MERK, produk.getMerk_produk());
values.put(COLUMN_JENIS, produk.getJenis_produk());
values.put(COLUMN_VARIASI, produk.getVariasi_produk());
values.put(COLUMN_FOTO, produk.getFoto_produk());

db.insert(TABLE_PRODUK, null, values);
db.close();
}

// FUNGSI UNTUK AMBIL 1 DATA PRODUK
public Produk getProduk(int id_produk){
SQLiteDatabase db = this.getReadableDatabase();

Cursor cursor = db.query(TABLE_PRODUK, new String[]{COLUMN_ID, COLUMN_KD ,COLUMN_NAMA, COLUMN_MERK
,COLUMN_JENIS, COLUMN_VARIASI , COLUMN_FOTO },
COLUMN_ID + "=?", new String[]{String.valueOf(id_produk)}, null, null,null, null);
if (cursor != null)
cursor.moveToFirst();

Produk produk = new Produk(cursor.getString(1), cursor.getString(2),cursor.getString(3),
cursor.getString(4),cursor.getString(5),cursor.getString(6));
return produk;
}

// FUNGSI UNTUK AMBIL SEMUA DATA PRODUK
public List<Produk> getSemuaProduk(){
List<Produk> produkList = new ArrayList<>();
String selectQuery = " SELECT * FROM " + TABLE_PRODUK ;

SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);

if (cursor.moveToFirst()){
do {
Produk produk = new Produk(cursor.getString(1), cursor.getString(2),cursor.getString(3),
cursor.getString(4),cursor.getString(5),cursor.getString(6));
produkList.add(produk);
} while (cursor.moveToNext());
}
return produkList;
}

// FUNGSI MENGHITUNG ADA BEBERAPA DATA
public int getProdukCount(){
String countQuery = "SELECT * FROM " + TABLE_PRODUK;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
cursor.close();
return cursor.getCount();
}

// FUNGSI UPDATE DATA PRODUK
public int updateDataProduk(Produk produk) {
SQLiteDatabase db = this.getWritableDatabase();

ContentValues values = new ContentValues();
values.put(COLUMN_KD, produk.getKd_produk());
values.put(COLUMN_NAMA, produk.getNama_produk());
values.put(COLUMN_MERK, produk.getMerk_produk());
values.put(COLUMN_JENIS, produk.getJenis_produk());
values.put(COLUMN_VARIASI, produk.getVariasi_produk());
values.put(COLUMN_FOTO, produk.getFoto_produk());

return db.update(TABLE_PRODUK, values, COLUMN_ID + " = ?",
new String[]{String.valueOf(produk.getId())});
}

// FUNGSI HAPUS DATA 1 PRODUK
public void hapusDataProduk(Produk produk) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_PRODUK, COLUMN_ID + " = ?",
new String[]{String.valueOf(produk.getId())});
db.close();
}

// FUNGSI UNTUK MENGHAPUS SEMUA DATA PRODUK
public void hapusSemuaDataProduk(){
SQLiteDatabase db = this.getWritableDatabase();

db.execSQL("DELETE FROM " + TABLE_PRODUK);
}

//FUNGSI MENGAMBIL DATA WHERE DI ACTIVITY KATEGORY
public List<Produk> getKategoryProduk(String mMerkProduk) {

List<Produk> kategoriList = new ArrayList<>();
String selectQuery = "SELECT * FROM " + TABLE_PRODUK + " WHERE " + COLUMN_MERK + " =? " ;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery,new String[]{ mMerkProduk } );

if (cursor.moveToFirst()) {
do {
Produk kategori = new Produk(cursor.getString(1), cursor.getString(2), cursor.getString(3),
cursor.getString(4), cursor.getString(5), cursor.getString(6));
kategoriList.add(kategori);
} while (cursor.moveToNext());
}
return kategoriList;
}
}

错误如下:

01-29 14:10:25.342 370-370/ptacs.ekatalog.com.e_katalogproduk E/AndroidRuntime: FATAL EXCEPTION: main
Process: ptacs.ekatalog.com.e_katalogproduk, PID: 370
java.lang.RuntimeException: Unable to start activity ComponentInfo{ptacs.ekatalog.com.e_katalogproduk/ptacs.ekatalog.com.e_katalogproduk.activity.ActivityKategori}: java.lang.IllegalArgumentException: the bind value at index 1 is null
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2308)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2368)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1285)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5235)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
Caused by: java.lang.IllegalArgumentException: the bind value at index 1 is null
at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:164)
at android.database.sqlite.SQLiteProgram.bindAllArgsAsStrings(SQLiteProgram.java:200)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316)
at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1255)
at ptacs.ekatalog.com.e_katalogproduk.helper.DBHandler.getKategoryProduk(DBHandler.java:152)
at ptacs.ekatalog.com.e_katalogproduk.activity.ActivityKategori.initRecyclerView(ActivityKategori.java:68)
at ptacs.ekatalog.com.e_katalogproduk.activity.ActivityKategori.onCreate(ActivityKategori.java:43)
at android.app.Activity.performCreate(Activity.java:6001)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2368) 
at android.app.ActivityThread.access$800(ActivityThread.java:144) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1285) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5235) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693) 
01-29 14:10:25.364 370-370/? I/Process: Sending signal. PID: 370 SIG: 9

ACTIVITY_MENU

ACTIVITY_KATEGORI

最佳答案

您在初始化 mMerkProduk 之前调用 initRecyclerView();。因此,只需在 if (getIntent().getExtras() != null) {....} block 之后调用 initRecyclerView(); 即可。就像这样

    if (getIntent().getExtras() != null) {
Bundle bundle = getIntent().getExtras();
mMerkProduk = bundle.getString(Constant.BUNDLE_MERK_PRODUK); //MERK kategori

//Toolbar
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
setTitle(mMerkProduk);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
dbHandler = new DBHandler(this);
}

initRecyclerView();
cekDataRecyclerView();

关于java - 如何从 DbHandler 外部调用变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48495941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com