There are 2 functions required for the call: 1) makeHTTPRequest and 2) handleHTTPResponse. Sample code for each of these is provided below.
makeHTTPRequest
private void makeHTTPRequest() { // Increment counter so we don't try infinite number of http requests // httpTryCount declared as a private class variable: private int httpTryCount = 0; httpTryCount++; // Show dialog // progressDialog1 declared as class variable: private ProgressDialog progressDialog1 = null; progressDialog1 = ProgressDialog.show(FoodDetail.this, "", "Loading...", true, false); // Fire off a thread to do some work that we shouldn't do directly in the UI thread Thread t = new Thread() { public void run() { try { HttpParams httpParameters = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParameters, Constants.connectionTimeout); HttpConnectionParams.setSoTimeout(httpParameters, Constants.socketTimeout); HttpClient httpclient = new DefaultHttpClient(httpParameters); String requestURL = "http://www.yoursite.com/data_feed.php?id=5"; //Log.d(TAG,requestURL); HttpGet httpget = new HttpGet(requestURL); // Create a response handler ResponseHandlerresponseHandler = new BasicResponseHandler(); strResponse = httpclient.execute(httpget, responseHandler); handler.sendEmptyMessage(0); } catch (Exception e) { //Log.d(TAG, "Error occurred during load "+ e); handler.sendEmptyMessage(-1); } //try } //run() }; //thread t.start(); }
handleHTTPResponse
private Handler handler = new Handler() { @Override public void handleHTTPResponse(Message msg) { // close loading progress dialog progressDialog1.dismiss(); // If timeout, try again -- try maximum of 2 times if(msg.what == -1 && httpTryCount < 2) makeHTTPRequest(); else if(msg.what == -1 && httpTryCount >= 2) { // If 2 failed attempts, show error message Builder builder = new AlertDialog.Builder(FoodDetail.this); builder.setTitle("Oops"); builder.setMessage("An error occurred. Please make sure you are connected and try again."); builder.setPositiveButton("ok", null); builder.show(); } else if(msg.what == 0) { httpTryCount = 0; // Do something with your returned data, strResponse, here } Log.d(TAG, "response handler: "+msg); Log.d(TAG, "response text: "+strResponse); }; };
The inline comments should give you an idea of what is going on in each function. (Several class variables are described in the comments.)
Enjoy your new UI-friendly asynchronous web requests.
Thanks for the help!
ReplyDeleteGlad I could help!
ReplyDelete- tk
imports?
ReplyDelete