gpt4 book ai didi

Android - 如何处理 1000 条记录 SQLite

转载 作者:行者123 更新时间:2023-11-29 14:24:23 26 4
gpt4 key购买 nike

<分区>

我试图在开始时在我的 SQLite 上添加 1000 条记录,但问题是,当我启动应用程序时,它先是白屏,然后是黑屏,直到崩溃,当我添加 5 条记录时,它仍在执行与白屏和黑屏相同,但是当添加记录时,它向我展示了所有记录的 toast ,所以它有效......这是我的 SQLiteBaseAdapter:

public class ClientsSQL extends SQLiteOpenHelper {
// Declaramos la sentencia para crear la tabla
String sqlCreate = "CREATE TABLE Clients(NIF text,cognom1 text,cognom2 text,nom text)";



public ClientsSQL(Context context, String name, SQLiteDatabase.CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {

db.execSQL(sqlCreate);
db.execSQL("INSERT INTO Clients VALUES ('39410028B', 'hola1', 'Hola2', 'Jonathan')");
Log.v("INFO1", "creating db");


}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
// Si existe la tabla, la borramos y la volvemos a crear.
db.execSQL("DROP TABLE IF EXISTS Clients");
db.execSQL(sqlCreate);
}

我创建了 1 个插入作为测试,但随后在我的 MainActivity 上,我这样做了:

public void crearRegistres(SQLiteDatabase db){

int i;
String dni ="";

for (i = 0; i < 1000; i++) {

dni = NumeroDNI();

db.execSQL("INSERT INTO Clients VALUES ('" + dni + "'," + "'cognomA" + i + "'," + "'cognomB" + i + "',"+ "'nom" + i + "')");
}
Cursor c;
c = db.rawQuery("Select NIF from Clients", null);


Toast.makeText(MainActivity.this, Integer.toString(c.getCount()),
Toast.LENGTH_LONG).show();
c.close();
}

我试图创建一个 Async 类,但不明白我如何调用 doInBackGround() 方法(如果它是正确执行此操作的方法...)。

编辑1

这是我尝试过的,但我什么也做不了,直到它完成。

  progress = ProgressDialog.show(getActivity(), "Cargando",
"Espere mientras cargan sus ofertas", true);
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(2000);


} catch (InterruptedException e) {
e.printStackTrace();
}

getActivity().runOnUiThread(new Runnable() {

@Override
public void run() {
crearRegistres(db);
progress.dismiss();
}
});
}

}).start();
}

LogCat 错误:

 java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:200)
at android.os.Handler.<init>(Handler.java:114)
at android.widget.Toast$TN.<init>(Toast.java:327)
at android.widget.Toast.<init>(Toast.java:92)
at android.widget.Toast.makeText(Toast.java:241)
at joancolmenero.com.practicabasedadesxmlthreads.MainActivity.NumeroDNI(MainActivity.java:111)
at joancolmenero.com.practicabasedadesxmlthreads.MainActivity.crearRegistres(MainActivity.java:123)
at joancolmenero.com.practicabasedadesxmlthreads.MainActivity$1.run(MainActivity.java:41)
at java.lang.Thread.run(Thread.java:841)
03-26 11:49:20.436 21310-21310/joancolmenero.com.practicabasedadesxmlthreads E/WindowManager﹕ android.view.WindowLeaked: Activity joancolmenero.com.practicabasedadesxmlthreads.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{41f8f5b8 V.E..... R......D 0,0-684,324} that was originally added here
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:361)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:248)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.Dialog.show(Dialog.java:286)
at android.app.ProgressDialog.show(ProgressDialog.java:116)
at android.app.ProgressDialog.show(ProgressDialog.java:99)
at joancolmenero.com.practicabasedadesxmlthreads.MainActivity.onCreate(MainActivity.java:29)
at android.app.Activity.performCreate(Activity.java:5248)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2173)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269)
at android.app.ActivityThread.access$800(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5102)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)

编辑2

当我运行应用程序时,它需要大约 5 或 6 秒来显示我的 Activity ,它显示一个白屏,上面有任何东西......

public class MainActivity extends ActionBarActivity {
Button test;
public SQLiteDatabase db;
public ClientsSQL Conexion;
ProgressDialog progress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Conexion = new ClientsSQL(this, "Clients", null, 1);
db = Conexion.getReadableDatabase();

new MyAsyncTask().execute();



public void crearRegistres(SQLiteDatabase db){

int i;
String dni ="";

for (i = 0; i < 1000; i++) {

dni = NumeroDNI();

db.execSQL("INSERT INTO Clients VALUES ('" + dni + "'," + "'cognomA" + i + "'," + "'cognomB" + i + "',"+ "'nom" + i + "')");
}
Cursor c;
c = db.rawQuery("Select NIF from Clients", null);



c.close();
}
private class MyAsyncTask extends AsyncTask<Void, Void, Void> {
private final ProgressDialog dialog = new ProgressDialog(MainActivity.this);

@Override
protected void onPreExecute() {

this.dialog.setMessage("Cargando DNI en SQLite");
this.dialog.show();
}

@Override
protected Void doInBackground(Void... params) {
db.beginTransaction();

try {
crearRegistres(db);

db.setTransactionSuccessful();
} catch (Exception ignored) {

} finally {
db.endTransaction();
}
return null;
}


@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
Cursor c;
c = db.rawQuery("Select NIF from Clients where NIF", null);
Toast.makeText(MainActivity.this, Integer.toString(c.getCount()), Toast.LENGTH_LONG).show();
c.close();
this.dialog.dismiss();
}
}

}

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