Reputation: 91
I have a php service on my server which returns a JSON Array, I am now trying to connect this to my Android app.
Using the code bellow doesn't return any values:
private class getJson extends AsyncTask<String, Void, Void> {
TextView t;
String title;
@Override
protected void onPreExecute() {
// NOTE: You can call UI Element here.
t = (TextView) findViewById(R.id.test);
super.onPreExecute();
}
@Override
protected Void doInBackground(String... urls) {
try{
HttpClient hc = new DefaultHttpClient();
HttpPost hp = new HttpPost("http://www.test.com/test.php");
ArrayList<NameValuePair> ar = new ArrayList<NameValuePair>();
ar.add(new BasicNameValuePair("uni","1"));
ar.add(new BasicNameValuePair("num","10"));
ar.add(new BasicNameValuePair("format","json"));
hp.setEntity(new UrlEncodedFormEntity(ar));
HttpResponse hr = hc.execute(hp);
InputStream is = hr.getEntity().getContent();
BufferedReader br = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String line;
while((line = br.readLine()) != null){
sb.append(line + "\n");
}
is.close();
String result = sb.toString();
JSONArray ja = new JSONArray(result);
for(int i = 0; i<ja.length(); i++){
JSONObject jo = ja.getJSONObject(i);
title = jo.getString("title");
}
}catch(Exception e){
}
return null;
}
@Override
protected void onPostExecute(Void unused) {
t.setText(title);
}
}
The code does get called because I've put in some command line prints to check it goes into the methods. The php script also returns an array as I've checked that in a browser.
Am I doing something wrong here? This is my first time trying to link up a server so I'm kind of stabbing around in the dark with different tutorials so I've probably missed out something big.
Example of the JSON result from a browser:
{"reviews":[{"reviews":{"title":"test review","col_score":"5","col_ad":"test","night_score":"3","night_ad":"test","su_score":"4","su_ad":"test","lec_score":"5","lec_ad":"test","accom_score":"2","accom_ad":"test","sport_score":"4","sport_ad":"test","fac_score":"5","fac_ad":"test","soci_score":"4","soci_ad":"test","add_comments":"test","overall":"9"}}]}
Upvotes: 0
Views: 74
Reputation: 3711
You have initialised empty JSONArray
JSONArray ja = new JSONArray();
change it to
JSONArray ja = new JSONArray(result);
EDIT - Looking at your json
you should parse it as follows
JSONObject jsonObject = new JSONObject(result);
JSONArray jsonArray = jsonObject.getJSONArray("reviews");
for(int i = 0; i<jsonArray.length(); i++){
JSONObject jo = jsonArray.getJSONObject(i);
JSONObject jsonObject1 = jo.getJSONObject("reviews")
title = jsonObject1.getString("title");
}
Upvotes: 3