如何从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+

我如何从android中的php获取JSON

如何从 Android 中的 JSON OR URL 获取特定数据? [关闭]

使用 JSON 和 PHP 从 Mysql DB 获取数据到 listView