بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

ساخت لیست بی پایان

مدیریت گفتگو
125847 9 سال پیش
آخرین تغییر: 9 سال پیش

سلام

یه سوال داشتم زمانی که لیست بی پایان با مثلا ریسایکرویو میسازیم . چرا داده ها رو به صورت محدود از سرور میگیریم؟

چرا نمیگیم که همه داده ها رو بگیره؟

با تشکر

نظرات

fandroid 9 سال پیش
بستگی به کوئری ای که سمت سرور مینویسید داره که کل مقادیر رو از دیتابیس واکشی کنه یا نه یکسری داده محدود رو شما میتونید همه داده رو هم بگیرید و به صورت جیسون به اپ پاس بدین
125847 9 سال پیش
تعدادش فرض کیند زیاده مثل 10 هزار تا همون جور هم اضافه میشه . منظور م اینه که چرا این کار رو میکنند برای سرعت اپ ؟
fandroid 9 سال پیش
به خاط اینکه پیمایش این حجم داده از دید کاربر خسته کننده و همچنینی غیر منطقی هست پس این روش رو پیاده یمکنن که اگر خود کار بر نیاز داشت بقیه ایتم ها رو هم بررسی کنه و این باعث میشه تجربه کاربری اپ یا به اصطلاح ux اپ خوب باشه
125847 9 سال پیش
حالا که این کار رو انجام میدی یعنی محدودیت میزاری . یه مشکلی که من دارم اینه که بعضی مواقع که تند ریسایکرویو اسکرول میکنم . عمل گرفتن اطلاعات متوقف میشه برای چیه؟
fandroid 9 سال پیش
فک کنم به خاطر شرطی هست که گذاشتین برای جواب به این سوالتون باید کدتون رو بذارید

پاسخ‌ها 4

125847 9 سال پیش

قسمتی که ریسایکرویو صدا زده میشه

 
agahi_recycler.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);


}

@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
int totalItemCount = mLayoutManager.getItemCount();
int lastVisibleItem = mLayoutManager.findLastVisibleItemPosition();

if (totalItemCount > 1) {
if (lastVisibleItem >= totalItemCount - 1) {
// End has been reached
// do something


if (limit < total ) {
if (nDialog == null) {
swip = false;
if(scroll==0) {

if(net==0) {
//new NetCheck4().execute();

if (limit < total ) {
if (scroll == 0) {
scroll = 1;

limit+=12;

mTask = new home_agahi3_server(getActivity().getApplicationContext(), getActivity(),
limit + "", adapter
);
mTask.executeOnExecutor(mTask.THREAD_POOL_EXECUTOR, "");

} else {
// Toast.makeText(getActivity(), scroll + "", Toast.LENGTH_SHORT).show();
Log.e("SCroll", scroll + "");



}
}else{

}
}
}
}
}


}
}
}
});

نظرات

125847 9 سال پیش

متغیر scroll و net رو گذاشتم زمانیکه صفر نبود دیگه کد سمت سرور رو نخونه و زمانیکه متد postexecute   اجرا شد متغییرها دوباره صفر میشن

کد سمت سروور هم زیر

 
   public  class home_agahi3_server  extends AsyncTask<String,Void,String> {

private Context c;
private Activity ac;

private String state_id;
private String lim;
private RecyclerView rec;
AgahiRecyclerAdapter adp;


public home_agahi3_server(Context c,Activity ac,String lim,AgahiRecyclerAdapter adp
){
this.c=c;
this.ac=ac;

this.lim=lim;
this.adp=adp;



}

@Override
protected void onPreExecute() {
super.onPreExecute();
//swipeContainer.setRefreshing(false);
// agahi_recycler.setVisibility(View.INVISIBLE);
// rotat2.start();
// agahi_recycler.setOnScrollListener(null);

lay2.setVisibility(View.VISIBLE);
net=1;
lay2.setBackgroundResource(R.drawable.border_bg3);

}

@Override
protected String doInBackground(String... strings) {
try{
String data= URLEncoder.encode("get_post", "UTF-8")+"="+URLEncoder.encode("true","UTF-8");
// data+="&"+ URLEncoder.encode("state_id", "UTF-8")+"="+URLEncoder.encode(state_id,"UTF-8");
data+="&"+ URLEncoder.encode("lim", "UTF-8")+"="+URLEncoder.encode(lim,"UTF-8");




//
URL url=new URL(MainActivity.url+"post.php");
URLConnection connect=url.openConnection();
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setConnectTimeout(3000);
urlc.connect();

errorMessage = urlc.getResponseCode() == 200 ? "Successful Connection" : "Internet Error";
if(urlc.getResponseCode() == 200) {
connect.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(connect.getOutputStream());
wr.write(data);
wr.flush();

//
InputStreamReader in = new InputStreamReader(connect.getInputStream());
BufferedReader reader = new BufferedReader(in);
String line = "";
StringBuilder sb = new StringBuilder();
while ((line = reader.readLine()) != null) {
sb.append(line);

}
return sb.toString();
}


} catch (SocketTimeoutException e) {
errorMessage = "Connection Error1";
return "err1";

} catch (MalformedURLException e) {
errorMessage = "Connection Error2";
return "err1";

} catch (IOException e) {
Log.e("dddgg2", "dddgg2");
errorMessage = "Connection Error3";
return "err1";

}




return "";


}

@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
lay2.setVisibility(View.GONE);
lay2.setBackgroundResource(R.drawable.bg_cadr_around);
if(s.equals("err1")){
Toast.makeText(c,"err",Toast.LENGTH_SHORT).show();
lay2.setVisibility(View.GONE);
lay2.setBackgroundResource(R.drawable.bg_cadr_around);
net=0;
scroll=0;
}else {

// rotat2.stop();
lay2.setVisibility(View.GONE);
lay2.setBackgroundResource(R.drawable.bg_cadr_around);
// nDialog.dismiss();
nDialog = null;


// agahi_recycler.setVisibility(View.VISIBLE);
JSONArray arr = null;
JSONObject ob = null;

//Toast.makeText(c,scroll+"",Toast.LENGTH_SHORT).show();
scroll = 0;
try {
arr = new JSONArray(s);
for (int i = 0; i < arr.length(); i++) {

ob = arr.getJSONObject(i);

_name.add(ob.getString("title"));
_id.add(ob.getString("id"));
_body.add(ob.getString("content"));
_img.add(ob.getString("img"));
_imgs.add(ob.getString("imgs"));
_price.add(ob.getString("price"));
_color.add(ob.getString("color"));
_size.add(ob.getString("size"));
_shenas.add(ob.getString("shenas"));
_time.add(ob.getString("time"));
_expire.add(ob.getString("expire"));
_visit_today.add(ob.getString("todayvisit"));
_visit_total.add(ob.getString("totalvisit"));
_mobile.add(ob.getString("mobile"));
_cat.add(ob.getString("cat"));
_user_id.add(ob.getString("user"));
_menu_order.add(ob.getString("order"));
_link.add(ob.getString("link"));


}

adp.notifyDataSetChanged();


net = 0;



} catch (Exception e) {
//Toast.makeText(c,"errors in json",Toast.LENGTH_SHORT).show();
}
}

}
}

نظرات

125847 9 سال پیش

Runnable  رو بهش دادم با کدهای زیر بهتر شد. ولی هنوز بازهم مشکلش هست البته کمتر شده و البته systemClock.sleep هم بهش دادم

if (scroll == 0) {
scroll = 1;
Log.e("EEE","eee");
lay2.setVisibility(View.VISIBLE);
Runnable runnable = new Runnable() {
@Override
public void run() {
SystemClock.sleep(1000);
limit+=12;

mTask = new home_agahi3_server(getActivity().getApplicationContext(), getActivity(),
limit + "", adapter
);
mTask.executeOnExecutor(mTask.THREAD_POOL_EXECUTOR, "");


// lay2.setBackgroundResource(R.drawable.border_bg3);
}
};
new Thread(runnable).start();

نظرات

125847 9 سال پیش

الان که کار کردم روش فهمیدم به خاطر تصویر هست که داخل لیست هست. تصویر از سرور میگیره و از پیکاسو استفاده شده است  به خاطر همین بعضی موقع قاطی میکنه. برای حل مشکل چی باید کرد؟

Picasso.with(ac).load(url  +this.img_agahi.get(position) ).fit().placeholder(R.drawable.nopic).into(

viewHolder.imgs_agahis);

نظرات


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .