Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在列表视图适配器完成之前取消其异步任务_Android_Android Listview_Android Asynctask_Adapter - Fatal编程技术网

Android 在列表视图适配器完成之前取消其异步任务

Android 在列表视图适配器完成之前取消其异步任务,android,android-listview,android-asynctask,adapter,Android,Android Listview,Android Asynctask,Adapter,我需要通过按“上一步”按钮在完成填充列表视图适配器之前取消异步任务。根据这一准则 @Override public View getView(final int position, View convertView, ViewGroup parent) { if(convertView==null){ LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLA

我需要通过按“上一步”按钮在完成填充列表视图适配器之前取消异步任务。根据这一准则

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    if(convertView==null){
        LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);convertView=inflater.inflate(R.layout.seatadapter, null);

         TextView text3=(TextView)convertView.findViewById(R.id.text3);
         ProgressBar progressBar1=(ProgressBar)convertView.findViewById(R.id.progressBar1);
         TextView predic=(TextView)convertView.findViewById(R.id.textView3);
         TextView classs=(TextView)convertView.findViewById(R.id.textView4);
         ImageView img1=(ImageView)convertView.findViewById(R.id.imageView1);

new update(classs,predic, text3, progressBar1,img1).execute(tarinname.get(position), Date.get(position), Ffrom.get(position), Tto.get(position), Ccl.get(position));

class update extends AsyncTask{

@Override
        protected Object doInBackground(Object... params) {

Code For Json Parsing....
}
        protected void onPostExecute(Object result) {
            super.onPostExecute(result);

            if (this.result.contains("CurrentStatus")) {
                 progressBar.setVisibility(progressBar.GONE);

                 t.setVisibility(t.VISIBLE);
                 t3.setVisibility(t3.VISIBLE);
                im1.setVisibility(im1.VISIBLE);

                 t3.setText("Class "+TravelClass);

                 t1.setText(perdcition);

                 if (ConfirmTktStatus.contains("Confirm")) {
                    im1.setImageResource(R.drawable.img_green);

                }
                 if (ConfirmTktStatus.contains("Probable")) {

                    }
                 if (ConfirmTktStatus.contains("No Chance")) {

                    }

                t.setText(var1);

            }else {
                 progressBar.setVisibility(progressBar.GONE);
            }


                Toast.makeText(context, var, Toast.LENGTH_LONG).show();
                }
这是适配器类,我们无法在其过程中按back按钮取消它。按下后退按钮后,活动关闭,但后台任务继续

@Override
            protected void onCancelled() {
                // TODO Auto-generated method stub
                super.onCancelled();
                ((Activity)context).finish();

            }

我已经试过了,但是没有用

请创建一个列表来存储当前任务,然后随时取消它

for (AsyncTask myAsyncTask : myAsyncTasks) {
    if (myAsyncTask.getStatus().equals(AsyncTask.Status.RUNNING)) {
        myAsyncTask.cancel(true);
    }
}
myAsyncTasks.clear();
代码的详细信息:

private List<AsyncTask> myAsyncTasks = new ArrayList<>();
public void addRunningTask(AsyncTask task) {
    myAsyncTasks.add(task);
}

public void cancelRunningTasks() {
    for (AsyncTask myAsyncTask : myAsyncTasks) {
        if (myAsyncTask.getStatus().equals(AsyncTask.Status.RUNNING)) {
            myAsyncTask.cancel(true);
        }
    }
    myAsyncTasks.clear();
}
@Override
public void onBackPressed() {
    cancelRunningTasks();
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    if(convertView==null){
        LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);convertView=inflater.inflate(R.layout.seatadapter, null);

         TextView text3=(TextView)convertView.findViewById(R.id.text3);
         ProgressBar progressBar1=(ProgressBar)convertView.findViewById(R.id.progressBar1);
         TextView predic=(TextView)convertView.findViewById(R.id.textView3);
         TextView classs=(TextView)convertView.findViewById(R.id.textView4);
         ImageView img1=(ImageView)convertView.findViewById(R.id.imageView1);

AsyncTask task = new update(classs,predic, text3, progressBar1,img1);
task.execute(tarinname.get(position), Date.get(position), Ffrom.get(position), Tto.get(position), Ccl.get(position));
addRunningTask(task);

class update extends AsyncTask{

@Override
        protected Object doInBackground(Object... params) {

Code For Json Parsing....
}
        protected void onPostExecute(Object result) {
            super.onPostExecute(result);

            if (this.result.contains("CurrentStatus")) {
                 progressBar.setVisibility(progressBar.GONE);

                 t.setVisibility(t.VISIBLE);
                 t3.setVisibility(t3.VISIBLE);
                im1.setVisibility(im1.VISIBLE);

                 t3.setText("Class "+TravelClass);

                 t1.setText(perdcition);

                 if (ConfirmTktStatus.contains("Confirm")) {
                    im1.setImageResource(R.drawable.img_green);

                }
                 if (ConfirmTktStatus.contains("Probable")) {

                    }
                 if (ConfirmTktStatus.contains("No Chance")) {

                    }

                t.setText(var1);

            }else {
                 progressBar.setVisibility(progressBar.GONE);
            }


                Toast.makeText(context, var, Toast.LENGTH_LONG).show();
                }
private List myAsyncTasks=new ArrayList();
公共void addRunningTask(异步任务){
添加(任务);
}
public void cancelRunningTasks(){
用于(异步任务myAsyncTask:myAsyncTasks){
if(myAsyncTask.getStatus().equals(AsyncTask.Status.RUNNING)){
myAsyncTask.cancel(true);
}
}
myAsyncTasks.clear();
}
@凌驾
public void onBackPressed(){
取消运行任务();
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
if(convertView==null){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u SERVICE);convertView=充气器.充气器(R.LAYOUT.seatadapter,null);
TextView text3=(TextView)convertView.findViewById(R.id.text3);
ProgressBar progressBar1=(ProgressBar)convertView.findViewById(R.id.progressBar1);
TextView predic=(TextView)convertView.findViewById(R.id.textView3);
TextView类=(TextView)convertView.findViewById(R.id.textView4);
ImageView img1=(ImageView)convertView.findViewById(R.id.imageView1);
AsyncTask任务=新更新(classs、predic、text3、progressBar1、img1);
task.execute(tarinname.get(position)、Date.get(position)、Ffrom.get(position)、Tto.get(position)、Ccl.get(position));
addRunningTask(任务);
类更新扩展了异步任务{
@凌驾
受保护对象doInBackground(对象…参数){
Json解析代码。。。。
}
受保护的void onPostExecute(对象结果){
super.onPostExecute(结果);
if(this.result.contains(“CurrentStatus”)){
progressBar.setVisibility(progressBar.GONE);
t、 设置可见性(t.VISIBLE);
t3.设置可见性(t3.可见);
im1.setVisibility(im1.VISIBLE);
t3.setText(“类”+旅行类);
t1.设置文本(perdction);
if(ConfirmTktStatus.contains(“Confirm”)){
im1.setImageResource(R.drawable.img_绿色);
}
if(ConfirmTktStatus.contains(“可能”)){
}
if(ConfirmTktStatus.contains(“无机会”)){
}
t、 setText(var1);
}否则{
progressBar.setVisibility(progressBar.GONE);
}
Toast.makeText(上下文,变量,Toast.LENGTH_LONG).show();
}

metod如何?更新我尝试过的问题..!!看看你做了什么:当任务取消时你完成活动。当活动完成时你应该取消任务。你应该将AsynkTask实例保存在某个变量中,并在activity onStop lifecycle callback中取消它。我应该将此代码放在哪里..?在doInBackGround或其他地方se..?我正在将其粘贴到适配器..!!首先,您应该通过以下方式将任务插入列表:AsyncTask task=new update(classs,predic,text3,progressBar1,img1));task.execute…;myAsyncTasks.add(task);然后在按下“返回”按钮时取消它们。单击“it数组列表”和“更新”是asynctask类名ArrayList upd;定义数组列表upd=new ArrayList();新更新(classs、predic、text3、progressBar1、img1)。执行(tarinname.get(position)、Date.get(position)、Ffrom.get(position)、Tto.get(position)、Ccl.get(position));@覆盖受保护对象doInBackground(Object…params){for(AsyncTask myAsyncTask:upd){if(myAsyncTask.getStatus().equals(AsyncTask.Status.RUNNING)){myAsyncTask.cancel(true);}}}upd.clear();您为两个方法创建了一个Util类:insert to myAsyncTask和cancel in myAsyncTask。如下:私有静态列表myAsyncTask=new ArrayList();public static void addRunningTask(AsyncTask task){myAsyncTask.add(task);}public static void cancelRunningTasks(){for(AsyncTask myAsyncTask:myAsyncTask){if(myAsyncTask.getStatus().equals(AsyncTask.Status.RUNNING)){myAsyncTask.cancel(true);}myAsyncTask.clear();}谢谢你的代码,但也有一些错误,比如IDE强迫我删除重写backpressed方法,因为它不能在适配器中使用。。!