PDA

View Full Version : سوال: تازه سازی لیست ویو، بعد از ویرایش اطلاعات دیتابیس



kolibri
یک شنبه 30 اردیبهشت 1397, 10:23 صبح
سلام؛
من برای بروزرسانی لیست ویو دارای Adapter مشکل دارم و نمی تونم بعد از حذف یا ویرایش یک آیتم، اون رو بروزرسانی کنم.
متد حذف اطلاعات در اداپتر:


holder.delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DBConteroler dbConteroler = new DBConteroler(context);
boolean X = dbConteroler.DeleteBox(individualCar.getPostID());
if (X) {

} else {
Toast.makeText(context, "Error", Toast.LENGTH_SHORT).show();
}
}
});



من برای بروزرسانی از این روش استفاده کرده بودم که بعد از حذف/ویرایش یک آیتم مجددا این متد رو در اکتیویتی مورد نظر فراخوانی می کردم:



public void CreateList() {


ArrayList<Box> boxes = db.getBoxs();
Collections.reverse(boxes);
Adaptorz adaptorz = new Adaptorz(MainActivity.this, R.layout.flod_list, boxes);
adaptorz.notifyDataSetChanged();
LinearLayout ll = (LinearLayout) findViewById(R.id.llMain);
Button btnAdd = (Button) findViewById(R.id.btnAdd);
listView.destroyDrawingCache();
listView.setVisibility(ListView.INVISIBLE);
listView.setVisibility(ListView.VISIBLE);
listView.setAdapter(adaptorz);

}



و این هم خطا:



--------- beginning of crash
E/AndroidRuntime: FATAL EXCEPTION: main
Process: ir.radin.posto.posto, PID: 13239
java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.ArrayList ir.sto.sto.DBConteroler.getBoxs()' on a null object reference
at ir.sto.sto.MainActivity.CreateList(MainActivity.ja va:69)
at ir.sto.sto.Adaptorz$2.onClick(Adaptorz.java:155)
at android.view.View.performClick(View.java:5685)
at android.view.View$PerformClick.run(View.java:22481 )
at android.os.Handler.handleCallback(Handler.java:751 )
at android.os.Handler.dispatchMessage(Handler.java:95 )
at android.os.Looper.loop(Looper.java:241)
at android.app.ActivityThread.main(ActivityThread.jav a:6274)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:776)


البته، فکر می کنم راه من اصولی نیست، بنابراین اگر راه اصولی رو برای بروزرسانی لیست مطرح کنید، متشکرم می شوم.

farhad_shiri_ex
یک شنبه 30 اردیبهشت 1397, 15:27 عصر
ArrayList<Box> boxes = db.getBoxs();

این خطا داره میگه این شی db مقداردهی نشده Null هست این شی اگر تعریف سراسری داره که وقتی تو این متد می خواهید استفاده کنید باید قبلش مقدار داشته باشه که ظاهرا مقداری نداره.!

kolibri
چهارشنبه 02 خرداد 1397, 11:18 صبح
این خطا داره میگه این شی db مقداردهی نشده Null هست این شی اگر تعریف سراسری داره که وقتی تو این متد می خواهید استفاده کنید باید قبلش مقدار داشته باشه که ظاهرا مقداری نداره.!
سلام؛
آره، البته این مشکل نباید اختلالی ایجاد می کرد فکر کنم. ولی به هر حال کارها رو بجای اینکه در اکتیویتی انجام بدم، بردم داخل خود Adapter. اونجا همه آبجکت ها هستند و خوشبختانه هیچ کدام نال هم نیستند.


DBConteroler dbConteroler = new DBConteroler(context);
boolean X = dbConteroler.DeleteBox(individualCar.getPostID());
if (X) {
box.remove(position);
Adaptorz.this.notifyDataSetChanged();
Adaptorz.this.notifyDataSetInvalidated();

} else {
Toast.makeText(context, "در حذف بسته خطایی پیش آمده است.", Toast.LENGTH_SHORT).show();
}

farhad_shiri_ex
چهارشنبه 02 خرداد 1397, 13:24 عصر
آره، البته این مشکل نباید اختلالی ایجاد می کرد فکر کنم
دقیقا درست میگی !!!
کلا این helper آداپتر های اندروید روی اعصاب هستند یعنی فکر کن یک لیست می خواهی نشون بدی باید یک اکتیویتی یک آداپتر کلاس یک فایل xml بنویسی بعد این هارو هی وصله پینه کنی بهم من که حالم بد میشه!!
البته مثلا RX-JAVA یه کارهایی کرده که این وضعیت تو اندروید بهتر بشه!
ولی وقتی می تونی با نهایت 10 تا خط یک لیست ویو بنویسی تو Qt ویا ReactJS یکم عذاب آور بمونی تو اندروید ولی خوب اندروید راحته ... چون قواعدش ضعیفه!

#root#
پنج شنبه 03 خرداد 1397, 09:44 صبح
یه نگاهی به Android Architecture Components داشته باشید، کارتون رو تمیزتر و راحت‌تر میکنه.