Issue
I'm using AsyncTask to downoload a file .The asynkTask in in a service .I would like after downloading ,that the service do sometasks with the data returned from the onPostexecute of the asynkTask .I can see the data ,from log ,in the onPostexecute, but i couldn't ,get it in the service. I saw a lot of responses but the did not work for me ,i hope someone will provide me with a solution.Thank you in advance.
I started the service from the main activity.
**EDIT 3 ** No exception anymore , i added the context to new DownloadFileFromURL(this).execute(file_url);
This code is working now.
after editing ,i'm having an execption . This the code i'm using : This the service :
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();
}
}
And this my DownloadFileFromURL class
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
}
}
The Interface :
public interface OnTaskCompleted{
void onTaskCompleted(String values);
}
Solution
1.Create an interface
public interface OnTaskCompleted{
void onTaskCompleted(boolean isSuccess);
}
2.Implement OnTaskCompleted
in your service
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. In onPostExecute
you'll have to set the listener true
protected void onPostExecute(String reslut) {
listener.onTaskCompleted(values);
}
This is just how you have to do it , it may not work as it is , you'll have to do the required changes
Answered By - Gautami
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.