PDA

View Full Version : چگونه در بک گراند gridview رو آپدیت کنیم؟



gjmkdyttyhujk
چهارشنبه 09 اردیبهشت 1394, 13:30 عصر
سلام خدمت دوستان عزیز.

من دارم یه برنامه ای می نویسم و تو اون باید توی گرید ویو مقادیری رو قرار بدم. یعنی از یه دیتابیسی بخونم و توی گریدویو قرار بدم. منتها چون این فرآیند زمان بر هست من می خواستم که وقتی کاربر روی روی باتن کلیک کرد یه صفحه لودینگی باز بشه و عملیات در بک گراند انجام بشه و بعد از تموم شدن عملیات صفحه لودینگ بسته بشه. توی stack وجاهای دیگه گشتم و می دونم باید از asynctask استفاده کنم ولی کدم ایراد داره و force close میده.

این هم کدی هست که استفاده می کنم. ممنون میشم اساتید راهنمایی بفرمایید.


AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {

ProgressDialog pd;

@Override
protected void onPreExecute() {
pd = new ProgressDialog(getApplicationContext());
pd.setTitle("Processing...");
pd.setMessage("Please wait.");
pd.setCancelable(false);
pd.setIndeterminate(true);
pd.show();
}

@Override
protected Void doInBackground(Void... arg0) {


try {
final GridviewAdapter mAdapter;
final ArrayList<String> listCountry;
final ArrayList<Integer> listFlag;

listCountry = new ArrayList<String>();

listCountry.add("India");
listCountry.add("China");
listCountry.add("Canada");
listCountry.add("Norway");
listCountry.add("France");
listCountry.add("Germany");
listCountry.add("Iran");
listCountry.add("Italy");
listCountry.add("Japan");
listCountry.add("Korea");
listCountry.add("Mexico");
listCountry.add("Netherlands");
listCountry.add("Portugal");
listCountry.add("Russia");
listCountry.add("Saudi Arabia");
listCountry.add("Spain");
listCountry.add("Turkey");
listCountry.add("United Kingdom");
listCountry.add("United States");

listFlag = new ArrayList<Integer>();
listFlag.add(R.drawable.w1);
listFlag.add(R.drawable.w2);
listFlag.add(R.drawable.w3);
listFlag.add(R.drawable.w4);
listFlag.add(R.drawable.w5);
listFlag.add(R.drawable.w6);
listFlag.add(R.drawable.w7);
listFlag.add(R.drawable.w8);
listFlag.add(R.drawable.w9);
listFlag.add(R.drawable.w10);
listFlag.add(R.drawable.w11);
listFlag.add(R.drawable.w12);
listFlag.add(R.drawable.w13);
listFlag.add(R.drawable.w14);
listFlag.add(R.drawable.w15);
listFlag.add(R.drawable.w16);
listFlag.add(R.drawable.w17);
listFlag.add(R.drawable.w18);
listFlag.add(R.drawable.w19);




mAdapter = new GridviewAdapter(FirstPageActivity.this,listCountry , listFlag);

// Set custom adapter to gridview
GridView gridView0 = (GridView)findViewById(R.id.gridView1);
gridView0.setAdapter(mAdapter);




//Do something...

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}

@Override
protected void onPostExecute(Void result) {
if (pd!=null) {
pd.dismiss();
}
}

};
task.execute((Void[])null);

tux-world
چهارشنبه 09 اردیبهشت 1394, 13:48 عصر
خطا؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟:اشتباه:

gjmkdyttyhujk
چهارشنبه 09 اردیبهشت 1394, 13:56 عصر
خطا؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟:اشتباه:

این کد رو من داخل oncreate تعریف کردم و وقتی که اجرا می کنم force close میده.
این هم logcat هست.


04-29 14:39:32.159: D/jdwp(22273): sendBufferedRequest : len=0x4F
04-29 14:39:32.161: W/asset(22273): AssetManager-->addDefaultAssets CIP path not exsit!
04-29 14:39:32.253: D/AbsListView(22273): checkAbsListViewlLogProperty get invalid command
04-29 14:39:32.258: D/AbsListView(22273): checkAbsListViewlLogProperty get invalid command
04-29 14:39:32.261: D/AbsListView(22273): checkAbsListViewlLogProperty get invalid command
04-29 14:39:32.264: D/AbsListView(22273): checkAbsListViewlLogProperty get invalid command
04-29 14:39:32.267: D/AbsListView(22273): checkAbsListViewlLogProperty get invalid command
04-29 14:39:32.270: D/AbsListView(22273): checkAbsListViewlLogProperty get invalid command
04-29 14:39:32.274: D/AbsListView(22273): checkAbsListViewlLogProperty get invalid command
04-29 14:39:32.277: D/AbsListView(22273): checkAbsListViewlLogProperty get invalid command
04-29 14:39:32.280: D/AbsListView(22273): checkAbsListViewlLogProperty get invalid command
04-29 14:39:32.284: D/AbsListView(22273): checkAbsListViewlLogProperty get invalid command
04-29 14:39:32.286: D/AbsListView(22273): checkAbsListViewlLogProperty get invalid command
04-29 14:39:32.289: D/AbsListView(22273): checkAbsListViewlLogProperty get invalid command
04-29 14:39:32.371: D/AndroidRuntime(22273): Shutting down VM
04-29 14:39:32.371: W/dalvikvm(22273): threadid=1: thread exiting with uncaught exception (group=0x40d299a8)
04-29 14:39:32.379: E/AndroidRuntime(22273): FATAL EXCEPTION: main
04-29 14:39:32.379: E/AndroidRuntime(22273): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.paresh.gridviewexample/com.paresh.gridviewexample.FirstPageActivity}: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
04-29 14:39:32.379: E/AndroidRuntime(22273): at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:2343)
04-29 14:39:32.379: E/AndroidRuntime(22273): at android.app.ActivityThread.handleLaunchActivity(Ac tivityThread.java:2395)
04-29 14:39:32.379: E/AndroidRuntime(22273): at android.app.ActivityThread.access$600(ActivityThre ad.java:162)
04-29 14:39:32.379: E/AndroidRuntime(22273): at android.app.ActivityThread$H.handleMessage(Activit yThread.java:1364)
04-29 14:39:32.379: E/AndroidRuntime(22273): at android.os.Handler.dispatchMessage(Handler.java:10 7)
04-29 14:39:32.379: E/AndroidRuntime(22273): at android.os.Looper.loop(Looper.java:194)
04-29 14:39:32.379: E/AndroidRuntime(22273): at android.app.ActivityThread.main(ActivityThread.jav a:5392)
04-29 14:39:32.379: E/AndroidRuntime(22273): at java.lang.reflect.Method.invokeNative(Native Method)
04-29 14:39:32.379: E/AndroidRuntime(22273): at java.lang.reflect.Method.invoke(Method.java:525)
04-29 14:39:32.379: E/AndroidRuntime(22273): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:833)
04-29 14:39:32.379: E/AndroidRuntime(22273): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:600)
04-29 14:39:32.379: E/AndroidRuntime(22273): at dalvik.system.NativeStart.main(Native Method)
04-29 14:39:32.379: E/AndroidRuntime(22273): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
04-29 14:39:32.379: E/AndroidRuntime(22273): at android.view.ViewRootImpl.setView(ViewRootImpl.jav a:650)
04-29 14:39:32.379: E/AndroidRuntime(22273): at android.view.WindowManagerGlobal.addView(WindowMan agerGlobal.java:248)
04-29 14:39:32.379: E/AndroidRuntime(22273): at android.view.WindowManagerImpl.addView(WindowManag erImpl.java:69)
04-29 14:39:32.379: E/AndroidRuntime(22273): at android.app.Dialog.show(Dialog.java:281)
04-29 14:39:32.379: E/AndroidRuntime(22273): at com.paresh.gridviewexample.FirstPageActivity$1.onP reExecute(FirstPageActivity.java:49)
04-29 14:39:32.379: E/AndroidRuntime(22273): at android.os.AsyncTask.executeOnExecutor(AsyncTask.j ava:586)
04-29 14:39:32.379: E/AndroidRuntime(22273): at android.os.AsyncTask.execute(AsyncTask.java:534)
04-29 14:39:32.379: E/AndroidRuntime(22273): at com.paresh.gridviewexample.FirstPageActivity.onCre ate(FirstPageActivity.java:133)
04-29 14:39:32.379: E/AndroidRuntime(22273): at android.app.Activity.performCreate(Activity.java:5 122)
04-29 14:39:32.379: E/AndroidRuntime(22273): at android.app.Instrumentation.callActivityOnCreate(I nstrumentation.java:1084)
04-29 14:39:32.379: E/AndroidRuntime(22273): at android.app.ActivityThread.performLaunchActivity(A ctivityThread.java:2307)
04-29 14:39:32.379: E/AndroidRuntime(22273): ... 11 more

gjmkdyttyhujk
چهارشنبه 09 اردیبهشت 1394, 16:29 عصر
یعنی این سوال اینقدر سخته؟آیا؟

gjmkdyttyhujk
پنج شنبه 10 اردیبهشت 1394, 11:18 صبح
آیا اینقدر آیا؟

peymanf11
پنج شنبه 10 اردیبهشت 1394, 13:11 عصر
با سلام

احتمال میدم شما کد هارو همینطوری توی oncreate کپی کردین (کاش یه جستجو میکردین)

نحوه فراخوانی کلاس task شما درون oncreate به این صورت باید باشد :


protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

new task().execute();
}


و کد هایی که توی پست اول قرار دادین باید خارج از oncreate بنویسید

همچنین مد نظر داشته باشید که باید یک gridView باید توی لایوتتون داشته باشید بنام gridView1

امیدوارم کارتون راه افتاده باشه

gjmkdyttyhujk
پنج شنبه 10 اردیبهشت 1394, 15:56 عصر
با سلام

احتمال میدم شما کد هارو همینطوری توی oncreate کپی کردین (کاش یه جستجو میکردین)

نحوه فراخوانی کلاس task شما درون oncreate به این صورت باید باشد :


protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

new task().execute();
}


و کد هایی که توی پست اول قرار دادین باید خارج از oncreate بنویسید

همچنین مد نظر داشته باشید که باید یک gridView باید توی لایوتتون داشته باشید بنام gridView1

امیدوارم کارتون راه افتاده باشه

سلام خدمت شما دوست عزیز. این لینک پروژه هست. و درست هم کار میکنه ولی وقتی من از عکس های حجیم(عکس های با حجم های حدود 200KB) یا بیشتر استفاده می کنم خطای
out of memory on a 18262616-byte allocation
داده میشه و force close میشه و میاد بیرون. ممنون میشم راهنمایی بفرمایید.:لبخندساده:
http://s4.picofile.com/file/8185805934/GridViewExampleActivity.rar.html

اینو هم بگم که برای استفاده از عکس ها error نمیده ها. برای مجموعه ای از عکس ها که از 11 تا بیشتر میشه error بالا رو میده. ممنون.