آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

کنسل کردن asyn task

125847  9 سال پیش  9 سال پیش
0 0

سلام

من یه لیست بی پایان با ریسایکرویو ساختم . زمانی که به انتهای  اون مقداری که از سرور می گیریه دوباره از یه کلاس 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();
}

}

}
 برای این سوال پاسخی وجود ندارد.

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