Skip to content

Instantly share code, notes, and snippets.

@soberstadt
Created January 25, 2012 21:51
Show Gist options
  • Save soberstadt/1679019 to your computer and use it in GitHub Desktop.
Save soberstadt/1679019 to your computer and use it in GitHub Desktop.
Asynctask in Android and onCompleteListener
package com.spencero.example.generalHttpRequest;
import com.spencero.example.generalHttpRequest.GeneralHttpTask.OnResponseListener;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class GeneralHTTPRequestExampleActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button = (Button) findViewById(R.id.submit);
button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
sendRequest();
}
});
sendRequest();
}
private void sendRequest()
{
GeneralHttpTask recoveryTask = new GeneralHttpTask(
GeneralHTTPRequestExampleActivity.this,
"Sending...",
onResponseListener );
String url = "http://www.256design.com/";
recoveryTask.execute(url, "200");
}
protected OnResponseListener onResponseListener = new OnResponseListener() {
public void onSuccess() {
AlertDialog.Builder builder = new AlertDialog.Builder(GeneralHTTPRequestExampleActivity.this);
builder.setPositiveButton("Okay", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.setMessage("Success");
builder.show();
}
public void onFailure(String message) {
AlertDialog.Builder builder = new AlertDialog.Builder(GeneralHTTPRequestExampleActivity.this);
builder.setPositiveButton("Okay", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.setMessage("Failure. Message: " + message);
builder.show();
}
};
}
package com.spencero.example.generalHttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.HttpHostConnectException;
import org.apache.http.impl.client.DefaultHttpClient;
import android.content.Context;
import android.os.AsyncTask;
public class GeneralHttpTask extends AsyncTask<String, Integer, Boolean>
{
private android.app.ProgressDialog progressDialog;
private OnResponseListener responder;
private int responseCode;
/** execute params:
* <ul>
* <li>Param1: Http Post request url</li>
* <li>Param2: Desired response code. Default: 200</li>
* <li>Param3: Attempts count. Default: 1 </li>
* </ul>
*/
public GeneralHttpTask(android.app.ProgressDialog progressDialog, OnResponseListener responder)
{
this.progressDialog = progressDialog;
this.responder = responder;
}
public GeneralHttpTask(Context context, String progressMessage, OnResponseListener responder)
{
this.progressDialog = new ProgressDialog(context, progressMessage);
this.responder = responder;
}
@Override
protected void onPreExecute()
{
progressDialog.show();
}
@Override
protected Boolean doInBackground(String... params) {
int desiredCode = 200;
int attemptsCount;
responseCode = 0;
try
{
if(params.length >= 2)
desiredCode = Integer.parseInt(params[1]);
if(params.length >= 3)
attemptsCount = Integer.parseInt(params[2]);
else
attemptsCount = 1;
HttpClient client = new DefaultHttpClient();
HttpPost httppost = new HttpPost(params[0]);
int executeCount = 0;
HttpResponse response;
do
{
publishProgress(executeCount+1,attemptsCount);
// Execute HTTP Post Request
executeCount++;
response = client.execute(httppost);
responseCode = response.getStatusLine().getStatusCode();
} while (executeCount < attemptsCount && responseCode == 408);;
}
catch (HttpHostConnectException e) {
responseCode = 408;
}
catch (Exception e) {
responseCode = 400;
e.printStackTrace();
}
return responseCode == desiredCode;
}
@Override
protected void onPostExecute(Boolean result) {
if (this.progressDialog.isShowing()) {
this.progressDialog.dismiss();
}
if(result)
responder.onSuccess();
else
{
responder.onFailure(Integer.toString(responseCode));
}
}
public interface OnResponseListener {
public void onSuccess();
public void onFailure(String message);
}
public class ProgressDialog extends android.app.ProgressDialog
{
public ProgressDialog(Context context, String progressMessage)
{
super(context);
setCancelable(false);
setMessage(progressMessage);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment