Reputation: 73
im working on posting a form to google server and getting the response in the form of html string and finally i put that string on webview to display result....i use the async task for this, progress dialog it shows but some times it shows me message to "force to close" without any changes i do in to code....that means prediction about output is unexpected... My code is like this......
public class Urlasync extends Activity {
WebView engine=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new AddStringTask().execute();
}
class AddStringTask extends AsyncTask<Void, Void, HttpResponse>
{
HttpResponse end = null;
String endResult = null;
public static final int TIMEOUT_MS=10000;
HttpClient client=null;
HttpPost post =null;
List<NameValuePair> pairs=null;
BasicResponseHandler myHandler=null;
private final ProgressDialog dialog = new ProgressDialog(Urlasync.this);
@Override
protected void onPreExecute() {
client = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(), TIMEOUT_MS);
HttpConnectionParams.setSoTimeout(client.getParams(), TIMEOUT_MS);
post = new HttpPost("http://www.google.com/m");
pairs = new ArrayList<NameValuePair>();
pairs.add(new BasicNameValuePair("hl", "en"));
pairs.add(new BasicNameValuePair("gl", "us"));
pairs.add(new BasicNameValuePair("source", "android-launcher-widget"));
pairs.add(new BasicNameValuePair("q", "persistent"));
try {
post.setEntity(new UrlEncodedFormEntity(pairs));
SystemClock.sleep(400);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.dialog.setMessage("starts...");
this.dialog.show();
}
@Override
protected HttpResponse doInBackground(Void... arg0) {
try {
HttpResponse response = client.execute(post);
if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
{
return response;
}
end = response;
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) { //this exception is called
e.printStackTrace();
}
return end;
}
@Override
protected void onPostExecute(HttpResponse params) {
if (this.dialog.isShowing()) {
this.dialog.dismiss();
}
if(params!=null)
{
String endResult=null;
BasicResponseHandler myHandler = new BasicResponseHandler();
try {
endResult = myHandler.handleResponse(params);
} catch (HttpResponseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
engine = (WebView)findViewById(R.id.webview);
engine.loadDataWithBaseURL("http://", endResult, "text/html", "UTF-8", null);
setContentView(R.layout.main);
engine.requestFocus(View.FOCUS_DOWN);
}
Toast.makeText(Urlasync.this, "Done!", Toast.LENGTH_SHORT).show();
}
}
}
suggestions with code are welcome thank you..
Upvotes: 0
Views: 716
Reputation: 9258
You shan't do anything with UI in doInBackground
(like showing Toast
). Do it in onPostExecute
or in onProgressUpdate
instead.
Upvotes: 3