7

PHP WebサーバーからAndroidモバイルにjsonデータを取得したいアプリケーションがあります。私が持っているのはURLであり、そのURLにアクセスすると、のようなjsonデータが得られます
{"items":[{"latitude":"420","longitude":"421"}]}。しかし、Android モバイルでこの json 形式を取得し、json 形式から緯度と経度の値を取得したいと考えています。

どうすればAndroidモバイルでそれを取得できますか..?

前もって感謝します..

4

4 に答える 4

9

最初に 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 "";
    }
}
于 2012-07-20T12:49:57.750 に答える
1

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 形式の文字列を作成するだけです

于 2012-07-20T12:54:23.310 に答える
1
  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()); 
}

簡単な例については、ここをクリックしてください

于 2012-07-20T12:52:48.973 に答える
0

次のようなものを使用します。

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();
}
于 2012-07-20T12:51:42.390 に答える