我正在使用AsyncTask来下载文件。在服务中使用asynkTask。我希望在下载之后,该服务可以使用asynkTask的onPostexecute返回的数据执行操作。我可以从日志中查看数据,在onPostexecute,但我不能,在服务中得到它。我看到了很多回复,但这对我没有用,我希望有人会给我一个解决方案。谢谢你。
我从主要活动开始提供服务。
**编辑3 **没有例外,我将上下文添加到新的DownloadFileFromURL(this).execute(file_url);
此代码现在正在运行。
编辑后,我有一个execption。 这是我正在使用的代码: 这项服务:
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);
}
答案 0 :(得分:1)
您可以创建一个接口作为监听器,它将监听任务的完成情况,一旦完成,它将在您的服务中调用call方法
答案 1 :(得分:1)
为了更容易使用AsyncTasks,我直接在我的服务中覆盖方法:
new DownloadFileFromURL() {
@Override
protected Object doInBackground(Object... params) {
// Download
return result;
}
@Override
protected void onPostExecute(Object result) {
runOnUiThread(new Runnable() {
@Override
public void run() {
// treat result (ui thread will be your service)
}
});
}
}.execute(file_url);
答案 2 :(得分:1)
!。创建一个界面
public interface OnTaskCompleted{
void onTaskCompleted(boolean isSuccess);
}
2.在您的服务中实现OnTaskCompleted
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().execute(file_url);
return START_STICKY;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
void onTaskCompleted(boolean isSuccess){
//your stuff on complete of task
}
}
3。在postExecute上你必须设置监听器为真
protected void onPostExecute(String reslut) {
listener.onTaskCompleted(values);
}
这就是你必须要做的事情,它可能无法正常工作,你必须做必要的改变