Reputation:
UPDATE: I found that the easiest way is to use AQuery.
I need to get my HttpPost for getting JSON data on another thread and I dont know how to get it all working together. Ive looked at the Painless Threading Blog and still cant get it to work.
Below is my original code befor trying to ansyncing it.
This is my first try at AsyncTasking so plz dont be to harsh. Thnx.
Inside my OnCreate:
/**
* Connecting to MySQL using PHP and Populate the ListView
* ========================================================
*/
mList = (ListView) findViewById(R.id.sidebar_list);
/** - http post for the list - */
try //<--THIS TRY METHOD IS WHAT NEED TO BE ON A SEPERATE THREAD??
{
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://192.168.1.34/xxxx/xxxxx_list.php");
List<NameValuePair> nameValue = new ArrayList<NameValuePair>();
httpPost.setEntity(new UrlEncodedFormEntity(nameValue));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (Exception e)
{
// TODO handle e
Log.e("log_tag", "Error in HTTP connect" + e.toString());
Toast.makeText(this, "HTTP Connection Error : " + e.toString(), Toast.LENGTH_LONG).show();
}
// EVERYTHING BELOW HERE CAN BE ON THE UI THREAD???
/**
* Convert response to string------------------------------------
* ----------------------
* */
try
{
BufferedReader BufR = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
sb = new StringBuilder();
sb.append(BufR.readLine() + "\n");
String line = "0";
while ((line = BufR.readLine()) != null)
{
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e)
{
// TODO handle e
Log.e("log_tag", "Error in convert to String" + e.toString());
}
// paring data
int q_id;
String q_label;
String q_title;
String q_description;
String q_gotoURL;
try
{
jArray = new JSONArray(result);
JSONObject json_data = null;
for (int i = 0; i < jArray.length(); i++)
{
json_data = jArray.getJSONObject(i);
q_id = json_data.getInt("_ID");
q_label = json_data.getString("label");
q_title = json_data.getString("title");
q_description = json_data.getString("description");
q_gotoURL = json_data.getString("gotoURL");
// mList.add();
}
setupList();
} catch (JSONException e1)
{
Toast.makeText(getBaseContext(), "No Data Found", Toast.LENGTH_LONG).show();
} catch (ParseException e1)
{
e1.printStackTrace();
}
};
Upvotes: 0
Views: 1253
Reputation: 10203
I think you can try something like this:
public class MyActivity extends Activity {
// paring data
int q_id;
String q_label;
String q_title;
String q_description;
String q_gotoURL;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
mList = (ListView) findViewById(R.id.sidebar_list);
context = getApplicationContext();
new HttpTask().execute("http://192.168.1.34/xxxx/xxxxx_list.php");
}
private class HttpTask extends AsyncTask<String, Void, String> {
protected String doInBackground(String... urls) {
try {
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(urls[0]);
List<NameValuePair> nameValue = new ArrayList<NameValuePair>();
httpPost.setEntity(new UrlEncodedFormEntity(nameValue));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
// Get result
BufferedReader BufR = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
sb = new StringBuilder();
sb.append(BufR.readLine() + "\n");
String line = "0";
while ((line = BufR.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
Toast.makeText(context, "HTTP Connection Error : " + e.toString(), Toast.LENGTH_LONG).show();
return null;
}
}
protected void onPostExecute(String result) {
try {
if(result == null)
throw new Exception("result is null");
jArray = new JSONArray(result);
JSONObject json_data = null;
for (int i = 0; i < jArray.length(); i++) {
json_data = jArray.getJSONObject(i);
q_id = json_data.getInt("_ID");
q_label = json_data.getString("label");
q_title = json_data.getString("title");
q_description = json_data.getString("description");
q_gotoURL = json_data.getString("gotoURL");
// mList.add();
}
//send message to handler to draw list
drawListHandler.sendEmptyMessage(0);
} catch (Exception e1) {
Toast.makeText(context, e1.getMessage(), Toast.LENGTH_LONG).show();
}
}
}
Handler drawListHandler = new Handler(){
/* (non-Javadoc)
* @see android.os.Handler#handleMessage(android.os.Message)
*/
@Override
public void handleMessage(Message msg) {
setupList();
}
};
}
Upvotes: 1
Reputation: 1007296
Other than setupList()
(assuming that updates some ListView
) and the Toast
, the rest of that should be in doInBackground()
. You want as little code as possible to be on the main application thread.
Upvotes: 0