如何从php服务器获取json数据到android mobile
Posted
技术标签:
【中文标题】如何从php服务器获取json数据到android mobile【英文标题】:how to get json data from php server to android mobile 【发布时间】:2012-07-19 18:00:42 【问题描述】:我有一个应用程序,我想在其中将 json 数据从 php web 服务器获取到 android mobile。我所拥有的是一个 URL,点击该 URL 会得到像 "items":["latitude":"420","longitude":"421"]
这样的 json 数据。但是我想在我的android手机中检索这个json格式,并从json格式中获取纬度和经度的值。
我们怎样才能在安卓手机上获得它..?
提前谢谢..
【问题讨论】:
在android上使用HTTPClient与服务器交换数据。如果您遇到困难,请发布您的代码,我们会尽力提供帮助。 【参考方案1】:先做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 字符串
"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 "";
【讨论】:
这个 'convertinputStreamToString(is)' 方法是什么?【参考方案2】:使用类似的东西:
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();
【讨论】:
如果你告诉我什么是异常,我可以帮忙,这段代码对我有用,除了 JSON 部分不同.. 我不知道有什么异常,但是当我在 catch 块中烘烤某些东西时,它会烘烤,但是当我烘烤纬度和经度时,它不会烘烤。 urlstring要不要传入""??【参考方案3】: 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());
对于一个简单的例子点击here
【讨论】:
如何在我的程序中获取这个 json 字符串?? 您可以将php中的返回字符串转换为json格式 我的 php url 正在返回 json 格式,但问题是我将如何在我的程序中得到它? 你在哪里传递 url??【参考方案4】:从您的 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 格式的字符串
【讨论】:
以上是关于如何从php服务器获取json数据到android mobile的主要内容,如果未能解决你的问题,请参考以下文章
如何在android中使用OkHttp从web api获取json数据到RecyclerView
Android - 如何使用 PHP 从 MySQL 数据库中获取响应?
从 php json 编码获取字符串到 android 目标 api23+