Hi I am trying to implement a generic Asynctask in android. I have around 8 to 10 activities which uses same asynctask with different parameters. Task works well for each activity. But when I try to implement a UI component it crashes. Here is my code any suggestions
public class SyncTaskService extends AsyncTask<String, Void, Void> {
OnAsyncResult onAsyncResult;
String ServerResponse;
String LocalResponse;
int Operationtype=-1;
private Context mContext;
public SyncTaskService (Context context){
mContext = context;
}
public void setOnResultListener(OnAsyncResult onAsyncResult) {
if (onAsyncResult != null) {
this.onAsyncResult = onAsyncResult;
}
}
@Override
protected Void doInBackground(String... params) {
BackGroundTasks Obj_BackGroungTasks = new BackGroundTasks();
Operationtype = Integer.parseInt(params[0]);
if (onAsyncResult != null)
{
switch (Operationtype) {
case 1:
String Type = params[2];
ServerResponse=null;
ServerResponse= Obj_BackGroungTasks.getdetails(mContext,Type);
break;
default:
break;
}
}
if (ServerResponse!=null) {
onAsyncResult.onResultSuccess(ServerResponse);
} else {
onAsyncResult.onResultFail(ServerResponse +LocalResponse);
}
return null;
}
public interface OnAsyncResult {
public abstract void onResultSuccess(String message);
public abstract void onResultFail(String errorMessage);
}
and this is how I am using it in my activity
SyncTaskService task = new SyncTaskService(getActivity());
task.setOnResultListener(asynResult);
task.execute("5",promotype);
OnAsyncResult asynResult = new OnAsyncResult() {
@Override
public void onResultFail(final String errorMessage) {
Log.d("On Result Fail In Activity", ""+errorMessage);
Toast.makeText(getActivity(), "Task completed", Toast.LENGTH_LONG).show();
}
@Override
public void onResultSuccess(String message) {
Log.d("On Result Success In Activity", ""+message);
ServerResponse=message;
Toast.makeText(getActivity(), "Task completed", Toast.LENGTH_LONG).show(); //craches here
}
};
Here us logcat
11-08 16:25:17.705: E/AndroidRuntime(671): FATAL EXCEPTION: AsyncTask #1
11-08 16:25:17.705: E/AndroidRuntime(671): java.lang.RuntimeException: An error occured while executing doInBackground()
11-08 16:25:17.705: E/AndroidRuntime(671): at android.os.AsyncTask$3.done(AsyncTask.java:278)
11-08 16:25:17.705: E/AndroidRuntime(671): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
11-08 16:25:17.705: E/AndroidRuntime(671): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
11-08 16:25:17.705: E/AndroidRuntime(671): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
11-08 16:25:17.705: E/AndroidRuntime(671): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
11-08 16:25:17.705: E/AndroidRuntime(671): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
11-08 16:25:17.705: E/AndroidRuntime(671): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
11-08 16:25:17.705: E/AndroidRuntime(671): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
11-08 16:25:17.705: E/AndroidRuntime(671): at java.lang.Thread.run(Thread.java:856)
11-08 16:25:17.705: E/AndroidRuntime(671): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
11-08 16:25:17.705: E/AndroidRuntime(671): at android.os.Handler.<init>(Handler.java:121)
11-08 16:25:17.705: E/AndroidRuntime(671): at android.widget.Toast$TN.<init>(Toast.java:317)
11-08 16:25:17.705: E/AndroidRuntime(671): at android.widget.Toast.<init>(Toast.java:91)
11-08 16:25:17.705: E/AndroidRuntime(671): at android.widget.Toast.makeText(Toast.java:233)
11-08 16:25:17.705: E/AndroidRuntime(671): at packagename.Activity$1.onResultFail(Activity.java:157)
11-08 16:25:17.705: E/AndroidRuntime(671): at packagename.SyncTaskService.doInBackground(SyncTaskService.java:115)
11-08 16:25:17.705: E/AndroidRuntime(671): at packagename.SyncTaskService.doInBackground(SyncTaskService.java:1)
11-08 16:25:17.705: E/AndroidRuntime(671): at android.os.AsyncTask$2.call(AsyncTask.java:264)
11-08 16:25:17.705: E/AndroidRuntime(671): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
11-08 16:25:17.705: E/AndroidRuntime(671): ... 5 more