У меня есть приложение, в котором я хочу получить данные json с веб-сервера php на Android-мобильный. то, что у меня есть, является URL-адресом и ударом, что URL-адрес дает мне данные json, такие как
{"items":[{"latitude":"420","longitude":"421"}]}
. Но я хочу получить этот формат json в мобильном устройстве Android и получить значения широты и долготы из json-формата.
как мы можем получить это на Android-телефоне …?
Заранее спасибо..
Сначала подключитесь к URL
String parsedString = ""; try { URL url = new URL(yourURL); URLConnection conn = url.openConnection(); HttpURLConnection httpConn = (HttpURLConnection) conn; httpConn.setAllowUserInteraction(false); httpConn.setInstanceFollowRedirects(true); httpConn.setRequestMethod("GET"); httpConn.connect(); InputStream is = httpConn.getInputStream(); parsedString = convertinputStreamToString(is); } catch (Exception e) { e.printStackTrace(); }
JSON String
{ "result": "success", "countryCodeList": [ {"countryCode":"00","countryName":"World Wide"}, {"countryCode":"kr","countryName":"Korea"} ] }
Ниже я приведу данные о стране
JSONObject json = new JSONObject(jsonstring); JSONArray nameArray = json.names(); JSONArray valArray = json.toJSONArray(nameArray); JSONArray valArray1 = valArray.getJSONArray(1); valArray1.toString().replace("[", ""); valArray1.toString().replace("]", ""); int len = valArray1.length(); for (int i = 0; i < valArray1.length(); i++) { Country country = new Country(); JSONObject arr = valArray1.getJSONObject(i); country.setCountryCode(arr.getString("countryCode")); country.setCountryName(arr.getString("countryName")); arrCountries.add(country); } public static String convertinputStreamToString(InputStream ists) throws IOException { if (ists != null) { StringBuilder sb = new StringBuilder(); String line; try { BufferedReader r1 = new BufferedReader(new InputStreamReader( ists, "UTF-8")); while ((line = r1.readLine()) != null) { sb.append(line).append("\n"); } } finally { ists.close(); } return sb.toString(); } else { return ""; } }
отправьте запрос от своего Android-клиента
public static JSONObject getJSONFromHttpPost(String URL) { try{ // Create a new HttpClient and Post Header DefaultHttpClient httpclient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(URL); String resultString = null; long t = System.currentTimeMillis(); HttpResponse response = (HttpResponse) httpclient.execute(httpPost); System.out.println("HTTPResponse received in [" + (System.currentTimeMillis()-t) + "ms]"); // Get hold of the response entity (-> the data): HttpEntity entity = response.getEntity(); if (entity != null) { // Read the content stream InputStream instream = entity.getContent(); // convert content stream to a String resultString= convertStreamToString(instream); instream.close(); System.out.println("result String : " + resultString); //resultString = resultString.substring(1,resultString.length()-1); // remove wrapping "[" and "]" System.out.println("result String : " + resultString); // Transform the String into a JSONObject JSONObject jsonObjRecv = new JSONObject(resultString); // Raw DEBUG output of our received JSON object: System.out.println("<JSONObject>\n"+jsonObjRecv.toString()+"\n</JSONObject>"); return jsonObjRecv; } }catch(Exception e){e.printStackTrace();} return null;
}
здесь есть функция для преобразования строки
private static String convertStreamToString(InputStream is) { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line =""; 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(); }
теперь все, что вам нужно сделать, это echo
ваша строка в формате JSON на сервере
String jsonStr = '{"menu": {' + '"id": "file",' + '"value": "File",' + '"popup": {' + '"menuitem": [' + '{"value": "New", "onclick": "CreateNewDoc()"},' + '{"value": "Open", "onclick": "OpenDoc()"},' + '{"value": "Close", "onclick": "CloseDoc()"}' + ']' + '}' + '}}';
Эта строка JSON находится на самом деле из http://json.org/example.html . Это был лучший, который я смог найти для данного примера.
Теперь, когда у нас есть это, давайте начнем использовать JSONObject
. Для этого вам понадобится следующий импорт: import org.json.JSONObject;
JSONObject jsonObj = new JSONObject(jsonStr);
С помощью этого экземпляра мы можем сделать следующее, чтобы отследить разные части данных из строки JSON –
// grabbing the menu object JSONObject menu = jsonObj.getJSONObject("menu"); Reading =========> HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); result=sb.toString();=======>Here result is the json string // these 2 are strings String id = menu.getString("id"); String value = menu.getString("value"); // the popop is another JSON object JSONObject popup = menu.getJSONObject("popup"); // using JSONArray to grab the menuitems from under popop JSONArray menuitemArr = popupObject.getJSONArray("menuitem"); // lets loop through the JSONArray and get all the items for (int i = 0; i < menuitemArr.length(); i++) { // printing the values to the logcat Log.v(menuitemArr.getJSONObject(i).getString("value").toString()); Log.v(menuitemArr.getJSONObject(i).getString("onclick").toString()); }
Для простого примера нажмите здесь.
Используйте что-то вроде:
try { HttpParams params = new BasicHttpParams(); HttpConnectionParams.setSoTimeout(params, 0); HttpClient httpClient = new DefaultHttpClient(params); //prepare the HTTP GET call HttpGet httpget = new HttpGet(urlString); //get the response entity HttpEntity entity = httpClient.execute(httpget).getEntity(); if (entity != null) { //get the response content as a string String response = EntityUtils.toString(entity); //consume the entity entity.consumeContent(); // When HttpClient instance is no longer needed, shut down the connection manager to ensure immediate deallocation of all system resources httpClient.getConnectionManager().shutdown(); //return the JSON response JSONObject object = new JSONObject(response.trim()); JSONArray jsonArray = object.getJSONArray("items"); if(jsonArray != null) { for(int i = 0 ; i < jsonArray.length() ; i++) { JSONObject object1 = (JSONObject) jsonArray.get(i); String latitude = object1.getString("latitude"); String longitude = object1.getString("longitude"); } } } }catch (Exception e) { e.printStackTrace(); }