繁体   English   中英

Android / Java:JSON HTTP请求

[英]Android/Java: JSON HTTP Request

如何在Java / Android中发出/下载http://coolsite.com/coolstuff.json的请求

Android支持所有标准的java.net类。 通过HTTP检索内容的最简单方法是在URL上调用openStream()并读取它:

URL url = new URL("http://coolsite.com/coolstuff.js");
    InputStream in = url.openStream();
    InputStreamReader reader = new InputStreamReader(in);
    // read the JSON data

有用于在Java中读取JSON的库(请参阅http://json.org/java ),但由于格式非常简单,因此您可以轻松地解析它。

从缓存的副本:

操作方法:Android作为RESTful客户端

这是一个专注于在Android上创建RESTful java对象的方法。 我使用过HTTPClient,HTTPEntry,HTTPGet,HTTPResponse,JSONArray和JSONObject类。 我认为如果我们需要使用来自客户端应用程序的Web服务,这将是有用的。

我已经实现了一个名为RestClient的简单Java对象,它连接到给定的Rest-JSON服务。 连接后,此对象打印响应内容。 使用此内容,创建了一个JSONObject。 然后,RestClient打印JSONObject的内容,解析该对象的所有值并打印它们。 作为最后一项工作,RestClient将一个示例值推送到JSONObject。

我上传了RestClient。 希望它会有用。

Ps:要在Android上访问互联网,必须在项目的AndroidManifest.xml文件中包含以下字段。

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

RestClient代码:

package praeda.muzikmekan;

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.ClientProtocolException;
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.JSONException;
import org.json.JSONObject;

import android.util.Log;

public class RestClient {

    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();
    }

    /* This is a test function which will connects to a given
     * rest service and prints it's response to Android Log with
     * labels "Praeda".
     */
    public static void connect(String url)
    {

        HttpClient httpclient = new DefaultHttpClient();

        // Prepare a request object
        HttpGet httpget = new HttpGet(url); 

        // Execute the request
        HttpResponse response;
        try {
            response = httpclient.execute(httpget);
            // Examine the response status
            Log.i("Praeda",response.getStatusLine().toString());

            // Get hold of the response entity
            HttpEntity entity = response.getEntity();
            // If the response does not enclose an entity, there is no need
            // to worry about connection release

            if (entity != null) {

                // A Simple JSON Response Read
                InputStream instream = entity.getContent();
                String result= convertStreamToString(instream);
                Log.i("Praeda",result);

                // A Simple JSONObject Creation
                JSONObject json=new JSONObject(result);
                Log.i("Praeda","<jsonobject>\n"+json.toString()+"\n</jsonobject>");

                // A Simple JSONObject Parsing
                JSONArray nameArray=json.names();
                JSONArray valArray=json.toJSONArray(nameArray);
                for(int i=0;i<valArray.length();i++)
                {
                    Log.i("Praeda","<jsonname"+i+">\n"+nameArray.getString(i)+"\n</jsonname"+i+">\n"
                            +"<jsonvalue"+i+">\n"+valArray.getString(i)+"\n</jsonvalue"+i+">");
                }

                // A Simple JSONObject Value Pushing
                json.put("sample key", "sample value");
                Log.i("Praeda","<jsonobject>\n"+json.toString()+"\n</jsonobject>");

                // Closing the input stream will trigger connection release
                instream.close();
            }


        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM