بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
کنسل کردن asyn task
سلام
من یه لیست بی پایان با ریسایکرویو ساختم . زمانی که به انتهای اون مقداری که از سرور می گیریه دوباره از یه کلاس asyntask فراخوانی میشه . کدها رو در پایین قرار دارم. درست کار میکنه ولی هنگامی که اسکرول سریع میدم غاطی می کنه لودینگ متوقف نمیشه کل و پروسه پایان لیست دیگه متوقف میشه کار نمی کنه . مشکل از کجاس؟ و میخواستم بدونم برای متوقف کردن اجرا کلاس asynctask چی کار باید کرد؟
public class home_agahi_server extends AsyncTask<String,Void,String> {
private Context c;
private Activity ac;
private String state_id;
private String lim;
private RecyclerView rec;
home_agahi3_server mTask = null;
private final ReentrantLock lock = new ReentrantLock();
private final Condition tryAgain = lock.newCondition();
private volatile boolean finished = false;
public home_agahi_server(Context c,Activity ac,String lim
){
this.c=c;
this.ac=ac;
this.lim=lim;
this.state_id=state_id;
_name.clear();
_id.clear();
_body.clear();
_img.clear();
_imgs.clear();
_price.clear();
_color.clear();
_size.clear();
_shenas.clear();
_time.clear();
_expire.clear();
_visit_today.clear();
_visit_total.clear();
_mobile.clear();
_cat.clear();
_user_id.clear();
_menu_order.clear();
_link.clear();
}
@Override
protected void onPreExecute() {
super.onPreExecute();
//swipeContainer.setRefreshing(false);
agahi_recycler.setVisibility(View.GONE);
}
@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();
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 (Exception e) {
Toast.makeText(c, "error in server", Toast.LENGTH_SHORT).show();
return "er";
}
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
// rotat1.stop();
//swipeContainer.setRefreshing(false);
swipeContainer.post(new Runnable() {
@Override
public void run() {
swipeContainer.setRefreshing(false);
}
});
agahi_recycler.setVisibility(View.VISIBLE);
swipeContainer.setVisibility(View.VISIBLE);
JSONArray arr=null;
JSONObject ob=null;
// Toast.makeText(c,s,Toast.LENGTH_SHORT).show();
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"));
}
final AgahiRecyclerAdapter adapter=new
AgahiRecyclerAdapter(getActivity().getApplicationContext(), getActivity()
,_name
,_id,
_cat,
_body
, _img,
_imgs,
_price,
_size,
_color,
_mobile,
_visit_today,
_visit_total
,_expire
,_shenas
,_time
,_menu_order
,_user_id
,_link
);
agahi_recycler.setAdapter(adapter);
Display display = getActivity().getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);
float density = getResources().getDisplayMetrics().density;
float dpWidth = outMetrics.widthPixels / density;
int columns = Math.round(dpWidth/300);
final GridLayoutManager mLayoutManager = new GridLayoutManager(getActivity(),columns);
agahi_recycler.setLayoutManager(mLayoutManager);
agahi_recycler.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (dy < 0) {
rotat2.stop();
// mTask.cancel(true);
}
}
@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
limit += 6;
if (limit < total && scroll == 0 && !rotat2.isStart()) {
scroll = 1;
mTask = new home_agahi3_server(getActivity().getApplicationContext(), getActivity(),
limit + "", adapter
);
mTask.executeOnExecutor(mTask.THREAD_POOL_EXECUTOR, "");
}
} else {
}
}
}
});
}catch (Exception e){
//Toast.makeText(c,"errors in json",Toast.LENGTH_SHORT).show();
}
}
}
برای این سوال پاسخی وجود ندارد.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .