Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid JSON get data from PHP
    text
    copied!<p>Does anyone have any idea what I am doing wrong? I tried doing just about every example out there. I just want to get the lat and lon coords from the server using php to my android phone. </p> <p>Thank you for your help in advanced</p> <p>This is the Section of my code which I am having problems with:</p> <pre><code>public void connect() { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); HttpClient httpclient = new DefaultHttpClient(); // Prepare a request object HttpGet httpget = new HttpGet("SERVER URL"); // Execute the request HttpResponse response; try { response = httpclient.execute(httpget); // Examine the response status //Log.i("Info",response.getStatusLine().toString()); Comes back with HTTP/1.1 200 OK // Get hold of the response entity HttpEntity entity = response.getEntity(); if (entity != null) { InputStream instream = entity.getContent(); String result= convertStreamToString(instream); JSONArray arr = new JSONArray(result); JSONObject jObj = arr.getJSONObject(0); String lat = jObj.getString("Lat"); Log.d("OutPut", jObj.getString("Lon")); Toast.makeText(this, lat, Toast.LENGTH_LONG).show(); instream.close(); } } catch (Exception e) { Log.e("Error",e.toString()); } } </code></pre> <p>I cannot get the data out of the JSONObject. I keep getting this exception.</p> <pre><code>03-31 17:23:41.457: E/Error(317): org.json.JSONException: Value &lt;!DOCTYPE of type java.lang.String cannot be converted to JSONArray </code></pre> <p>The PHP code from my server is outputting:</p> <pre><code>[{"Lat":"47.9255072","Lon":"-97.0846979","id":"34"}] </code></pre> <p>Here is all the code in my MainActivity</p> <pre><code>package com.misterbusllc.misterbusllc; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONArray; import org.json.JSONObject; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import android.os.Bundle; import android.os.StrictMode; import android.content.Intent; import android.support.v4.app.FragmentActivity; import android.util.Log; import android.view.Menu; import android.widget.SlidingDrawer; import android.widget.SlidingDrawer.OnDrawerCloseListener; import android.widget.SlidingDrawer.OnDrawerOpenListener; import android.widget.Toast; public class MainActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); connect(); //contactServer(); final SlidingDrawer slidingDrawerCost = (SlidingDrawer) findViewById(R.id.slidingDrawerCost); final SlidingDrawer slidingDrawerInfo = (SlidingDrawer) findViewById(R.id.slidingDrawerInfo); GoogleMap map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap(); LatLng latLng = new LatLng(47.922612,-97.060776); map.setMapType(GoogleMap.MAP_TYPE_NORMAL); map.addMarker(new MarkerOptions().position(latLng).title("MisterBus").snippet("MisterBus is currently here").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))); map.getUiSettings().setCompassEnabled(true); map.getUiSettings().setZoomControlsEnabled(true); map.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10)); slidingDrawerCost.setOnDrawerOpenListener(new OnDrawerOpenListener() { @Override public void onDrawerOpened() { Intent intent = new Intent(getApplicationContext(), Cost.class); startActivity(intent); } }); slidingDrawerCost.setOnDrawerCloseListener(new OnDrawerCloseListener() { @Override public void onDrawerClosed() { slidingDrawerCost.close(); } }); slidingDrawerInfo.setOnDrawerOpenListener(new OnDrawerOpenListener() { @Override public void onDrawerOpened() { Intent intent = new Intent(getApplicationContext(), info.class); startActivity(intent); } }); slidingDrawerInfo.setOnDrawerCloseListener(new OnDrawerCloseListener() { @Override public void onDrawerClosed() { slidingDrawerInfo.close(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void connect() { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); HttpClient httpclient = new DefaultHttpClient(); // Prepare a request object HttpGet httpget = new HttpGet("SERVER URL"); // Execute the request HttpResponse response; try { response = httpclient.execute(httpget); // Examine the response status //Log.i("Info",response.getStatusLine().toString()); Comes back with HTTP/1.1 200 OK // Get hold of the response entity HttpEntity entity = response.getEntity(); if (entity != null) { InputStream instream = entity.getContent(); String result= convertStreamToString(instream); JSONArray arr = new JSONArray(result); JSONObject jObj = arr.getJSONObject(0); String lat = jObj.getString("Lat"); Log.d("OutPut", jObj.getString("Lon")); Toast.makeText(this, lat, Toast.LENGTH_LONG).show(); instream.close(); } } catch (Exception e) { Log.e("Error",e.toString()); } } private static String convertStreamToString(InputStream is) { /* * To convert the InputStream to String we use the BufferedReader.readLine() * method. We iterate until the BufferedReader return null which means * there's no more data to read. Each line will appended to a StringBuilder * and returned as String. */ BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); } }//end of class </code></pre> <p>PHP CODE:</p> <pre><code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; &lt;html xmlns="http://www.w3.org/1999/xhtml"&gt; &lt;head&gt; &lt;meta charset=utf-8" http-equiv="Content-Type" content="application/json"; /&gt; &lt;title&gt;Gps Send&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;?php header('Content-type: application/json'); mysql_connect("localhost", "root","password"); mysql_select_db("misterbus"); $last =mysql_query("SELECT * FROM location WHERE ID = (SELECT MAX(id) FROM location)"); while($row=mysql_fetch_assoc($last)) $output[]=$row; print(json_encode($output)); mysql_close(); ?&gt; &lt;/body&gt; &lt;/html&gt; </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload