Android:从服务中的onPostexecute AsyncTask获取结果

问题描述 投票:1回答:3

[我正在使用AsyncTask下载文件。服务中的asynkTask。下载后,我想让服务使用asynkTask的onPostexecute返回的数据执行某些任务。我可以从日志中看到数据,在onPostexecute中,但是我无法在服务中获取它。我看到了很多答复,但是对我没有用,我希望有人能为我提供解决方案。在此先感谢您。

我从主要活动中启动了服务。

**编辑3 **也不例外,我将上下文添加到新的DownloadFileFromURL(this).execute(file_url);

此代码正在运行。

编辑后,我正在执行。这是我正在使用的代码:该服务:

 public class DownloadService extends Service  implements OnTaskCompleted {
        // File url to to download     
        private  String file_url = "http://192.168.1.150:8080/TestAndroid/DownloadServlet/Desert.jpg";
        public int onStartCommand(Intent intent, int flags, int startId) {
            int rssi1 = intent.getIntExtra("key1", 0);
            new DownloadFileFromURL(this).execute(file_url);
            return START_STICKY; }

                    //EDIT
                    DownloadFileFromURL  task = new DownloadFileFromURL(this);
        @Override
        public IBinder onBind(Intent intent) {
            // TODO Auto-generated method stub
            return null;
        }
@Override
        public void onTaskCompleted(String result){
            //your stuff on complete of task
            Toast.makeText(getBaseContext(), "Service receiving from post"+result, Toast.LENGTH_LONG).show();
        }
    }

这是我的DownloadFileFromURL类

 class DownloadFileFromURL extends AsyncTask<String, String, String> {
//Edit
private OnTaskCompleted listener;

    public DownloadFileFromURL (OnTaskCompleted listener){
        this.listener=listener;
    }
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
               }

        /**
         * Downloading file in background thread
         * */
        protected String doInBackground(String... f_url) {
            int count;
            try { //Download  }



                catch (Exception e) {             }
               return reslut;
            }

            protected void onProgressUpdate(String... progress) {
           }

            /**
             * After completing background task
             * 
             * **/


  @Override
         protected void onPostExecute(String reslut) {
listener.onTaskCompleted(reslut);
            Log.i("reslut","**************"+reslut);//i want to send this data to the service

               }

        }

接口:

public interface OnTaskCompleted{
void onTaskCompleted(String values);

}

android android-asynctask
3个回答
1
投票
1。创建interface

1
投票
您可以创建一个接口作为侦听器,该接口将侦听任务的完成,一旦完成,它将在您的服务中调用call方法

1
投票
为了使使用AsyncTasks更容易,我直接在Service中重写了这些方法:
© www.soinside.com 2019 - 2024. All rights reserved.