java - android从URL解析json

标签 java android

此行位于 onCreate 函数中

JSONObject cat = getJSONfromURL("http://localhost/2010/hkinterview/index.php?op=androidCat");

下面的代码是我在网上找到的从URL解析json数据的方法

    public static JSONObject getJSONfromURL(String url){

    //initialize
    InputStream is = null;   
    String result = "";   
    JSONObject jArray = null;

    //http post
    try {

        HttpClient httpclient = new DefaultHttpClient();   
        HttpPost httppost = new HttpPost(url);    
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();

        is = entity.getContent();    

    } catch (Exception e) {
        Log.e("log_tag", "Error in http connection "+e.toString());   
    }
    //convert response to string

    try {

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

    } catch (Exception e) {    
        Log.e("log_tag", "Error converting result "+e.toString());
    }
    //try parse the string to a JSON object

    try {
        jArray = new JSONObject(result);

    } catch (JSONException e) {
        Log.e("log_tag", "Error parsing data "+e.toString());

    }
    return jArray;
}

php输出的数据

[{"cid":"1","cname":"\u6703\u8a08\u754c Accounting ","img_cname":"nil"},{"cid":"2","cname":"\u5ee3\u544a\u754c Advertising","img_cname":"nil"},{"cid":"3","cname":"\u9280\u884c\u754c Banking ","img_cname":"nil"},{"cid":"4","cname":"\u653f\u5e9c\u670d\u52d9\u754c Civil Serv","img_cname":"nil"},{"cid":"5","cname":"\u5efa\u7bc9\u754c Construction","img_cname":"nil"},{"cid":"6","cname":"\u5ba2\u6236\u670d\u52d9\u696d CS ","img_cname":"nil"},{"cid":"7","cname":"\u8a2d\u8a08\u696d Design","img_cname":"nil"},{"cid":"8","cname":"\u6559\u80b2\u754c","img_cname":"nil"},{"cid":"9","cname":"\u5de5\u7a0b\u754c Engineering","img_cname":"nil"},{"cid":"10","cname":"\u98f2\u98df\u754c F&B ","img_cname":"nil"},{"cid":"11","cname":"\u9152\u5e97\u754c Hotel ","img_cname":"nil"},{"cid":"12","cname":"\u4fdd\u96aa\u754c Insurance ","img_cname":"nil"},{"cid":"13","cname":"\u6295\u8cc7\u754c Investment ","img_cname":"nil"},{"cid":"14","cname":"\u6cd5\u5f8b\u754c Law ","img_cname":"nil"},{"cid":"15","cname":"\u65b0\u805e\u50b3\u64ad\u754c Media","img_cname":"nil"},{"cid":"16","cname":"\u91ab\u7642\u5065\u5eb7\u754c Medicine\/Health","img_cname":"nil"},{"cid":"17","cname":"\u63a1\u8cfc\u754c Merchandising ","img_cname":"nil"},{"cid":"18","cname":"\u5730\u7522\u754c Property","img_cname":"nil"},{"cid":"19","cname":"\u96f6\u552e\u98f2\u98df Retail & R","img_cname":"nil"},{"cid":"20","cname":"\u92b7\u552e\u53ca\u5e02\u5834\u754c S & M","img_cname":"nil"},{"cid":"21","cname":"\u793e\u798f\u754c Social Services","img_cname":"nil"},{"cid":"22","cname":"\u96fb\u8a0a\u754c Telecom","img_cname":"nil"},{"cid":"23","cname":"\u65c5\u904a\u696d Tourism","img_cname":"nil"},{"cid":"24","cname":"\u5176\u4ed6 others","img_cname":"nil"},{"cid":"25","cname":"\u7269\u6d41\u754c Logistics","img_cname":"nil"},{"cid":"26","cname":"\u8cc7\u8a0a\u79d1\u6280\u754c I.T.","img_cname":"nil"}]

错误

03-06 12:58:02.574: E/log_tag(1776): Error in http connection java.net.SocketException: Permission denied
03-06 12:58:02.574: E/log_tag(1776): Error converting result java.lang.NullPointerException
03-06 12:58:02.584: E/log_tag(1776): Error parsing data org.json.JSONException: End of input at character 0 of 

代码似乎无法连接网址,有什么想法吗?

更新: 在我添加<uses-permission android:name="android.permission.INTERNET" />之后

03-06 13:14:23.444: E/log_tag(1923): Error in http connection org.apache.http.conn.HttpHostConnectException: Connection to http://localhost refused
03-06 13:14:23.444: E/log_tag(1923): Error converting result java.lang.NullPointerException
03-06 13:14:23.454: E/log_tag(1923): Error parsing data org.json.JSONException: End of input at character 0 of 
03-06 13:14:23.454: D/AndroidRuntime(1923): Shutting down VM
03-06 13:14:23.454: W/dalvikvm(1923): threadid=1: thread exiting with uncaught exception (group=0x40015560)
03-06 13:14:23.464: E/AndroidRuntime(1923): FATAL EXCEPTION: main
03-06 13:14:23.464: E/AndroidRuntime(1923): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.me.hkinterview/com.me.hkinterview.hkinterviewActivity}: java.lang.NullPointerException
03-06 13:14:23.464: E/AndroidRuntime(1923):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
03-06 13:14:23.464: E/AndroidRuntime(1923):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-06 13:14:23.464: E/AndroidRuntime(1923):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-06 13:14:23.464: E/AndroidRuntime(1923):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
03-06 13:14:23.464: E/AndroidRuntime(1923):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-06 13:14:23.464: E/AndroidRuntime(1923):     at android.os.Looper.loop(Looper.java:123)
03-06 13:14:23.464: E/AndroidRuntime(1923):     at android.app.ActivityThread.main(ActivityThread.java:3683)
03-06 13:14:23.464: E/AndroidRuntime(1923):     at java.lang.reflect.Method.invokeNative(Native Method)
03-06 13:14:23.464: E/AndroidRuntime(1923):     at java.lang.reflect.Method.invoke(Method.java:507)
03-06 13:14:23.464: E/AndroidRuntime(1923):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-06 13:14:23.464: E/AndroidRuntime(1923):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-06 13:14:23.464: E/AndroidRuntime(1923):     at dalvik.system.NativeStart.main(Native Method)
03-06 13:14:23.464: E/AndroidRuntime(1923): Caused by: java.lang.NullPointerException
03-06 13:14:23.464: E/AndroidRuntime(1923):     at com.me.hkinterview.hkinterviewActivity.onCreate(hkinterviewActivity.java:27)
03-06 13:14:23.464: E/AndroidRuntime(1923):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-06 13:14:23.464: E/AndroidRuntime(1923):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
03-06 13:14:23.464: E/AndroidRuntime(1923):     ... 11 more

我添加了真实域名

03-06 13:27:36.024: E/log_tag(2021): Error parsing data org.json.JSONException: Value [{"img_cname":"nil","cid":"1","cname":"會計界 Accounting "},{"img_cname":"nil","cid":"2","cname":"廣告界 Advertising"},{"img_cname":"nil","cid":"3","cname":"銀行界 Banking "},{"img_cname":"nil","cid":"4","cname":"政府服務界 Civil Serv"},{"img_cname":"nil","cid":"5","cname":"建築界 Construction"},{"img_cname":"nil","cid":"6","cname":"客戶服務業 CS "},{"img_cname":"nil","cid":"7","cname":"設計業 Design"},{"img_cname":"nil","cid":"8","cname":"教育界"},{"img_cname":"nil","cid":"9","cname":"工程界 Engineering"},{"img_cname":"nil","cid":"10","cname":"飲食界 F&B "},{"img_cname":"nil","cid":"11","cname":"酒店界 Hotel "},{"img_cname":"nil","cid":"12","cname":"保險界 Insurance "},{"img_cname":"nil","cid":"13","cname":"投資界 Investment "},{"img_cname":"nil","cid":"14","cname":"法律界 Law "},{"img_cname":"nil","cid":"15","cname":"新聞傳播界 Media"},{"img_cname":"nil","cid":"16","cname":"醫療健康界 Medicine\/Health"},{"img_cname":"nil","cid":"17","cname":"採購界 Merchandising "},{"img_cname":"nil","cid":"18","cname":"地產界 Property"},{"img_cname":"nil","cid":"19","cname":"零售飲食 Retail & R"},{"img_cname":"nil","cid":"20","cname":"銷售及市場界 S & M"},{"img_cname":"nil","cid":"21","cname":"社福界 Social Services"},{"img_cname":"nil","cid":"22","cname":"電訊界 Telecom"},{"img_cname":"nil","cid":"23","cname":"旅遊業 Tourism"},{"img_cname":"nil","cid":"24","cname":"其他 others"},{"img_cname":"nil","cid":"25","cname":"物流界 Logistics"},{"img_cname":"nil","cid":"26","cname":"資訊科技界 I.T."}] of type org.json.JSONArray cannot be converted to JSONObject
03-06 13:27:36.024: D/AndroidRuntime(2021): Shutting down VM
03-06 13:27:36.024: W/dalvikvm(2021): threadid=1: thread exiting with uncaught exception (group=0x40015560)
03-06 13:27:36.034: E/AndroidRuntime(2021): FATAL EXCEPTION: main
03-06 13:27:36.034: E/AndroidRuntime(2021): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.me.hkinterview/com.me.hkinterview.hkinterviewActivity}: java.lang.NullPointerException
03-06 13:27:36.034: E/AndroidRuntime(2021):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
03-06 13:27:36.034: E/AndroidRuntime(2021):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-06 13:27:36.034: E/AndroidRuntime(2021):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-06 13:27:36.034: E/AndroidRuntime(2021):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
03-06 13:27:36.034: E/AndroidRuntime(2021):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-06 13:27:36.034: E/AndroidRuntime(2021):     at android.os.Looper.loop(Looper.java:123)
03-06 13:27:36.034: E/AndroidRuntime(2021):     at android.app.ActivityThread.main(ActivityThread.java:3683)
03-06 13:27:36.034: E/AndroidRuntime(2021):     at java.lang.reflect.Method.invokeNative(Native Method)
03-06 13:27:36.034: E/AndroidRuntime(2021):     at java.lang.reflect.Method.invoke(Method.java:507)
03-06 13:27:36.034: E/AndroidRuntime(2021):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-06 13:27:36.034: E/AndroidRuntime(2021):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-06 13:27:36.034: E/AndroidRuntime(2021):     at dalvik.system.NativeStart.main(Native Method)
03-06 13:27:36.034: E/AndroidRuntime(2021): Caused by: java.lang.NullPointerException
03-06 13:27:36.034: E/AndroidRuntime(2021):     at com.me.hkinterview.hkinterviewActivity.onCreate(hkinterviewActivity.java:27)
03-06 13:27:36.034: E/AndroidRuntime(2021):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-06 13:27:36.034: E/AndroidRuntime(2021):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
03-06 13:27:36.034: E/AndroidRuntime(2021):     ... 11 more

最佳答案

在你的AndroidManifest.xml中有权限

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

关于java - android从URL解析json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9612127/

相关文章:

java - 服务器端从另一个客户端获取 GET 请求时推送到客户端

java - 如何在 Java 中使我的 JSON 更好?严格使用 - org.json.JSON

java - 扫描不适用于 logback.xml

java - 我可以在 Firebase 数据库中存储 Int 值吗

java - Android使用指纹解密文件

Java/WildFly/MongoDB/JAAS - 身份验证始终返回 403 - 禁止

java - 执行一对一映射时,Hibernate 不会填充第二个表

android - 如何旋转图像并最终使用动画更改图像

java - ArrayList<CustomClass> 中的 JSON 对象始终覆盖前一个对象。怎么解决?

android - 在动画完成之前调用 fragment onDestroyView()