简体   繁体   English

从url读取json(Android)

[英]Read json from url(Android)

Sorry for my English. 对不起我的英语不好。 I can not in any way to display data that are taken from the json link. 我无法以任何方式显示从json链接获取的数据。 Like a lot of examples on the internet, but I can not seem to understand what is the error. 就像互联网上的许多示例一样,但我似乎无法理解什么是错误。 I think that is not correct php files, although it can be. 我认为这是不正确的php文件,尽管可以。 I ask you, programmers help to understand why the application does not work. 我请您,程序员帮助您了解为什么该应用程序无法正常工作。 Below I have brought all the files: Working json link from which I am trying to read data http://ksupulse.tk/get_all.php 下面,我带来了所有文件:正在尝试从中读取数据的json链接http://ksupulse.tk/get_all.php

db_config.php db_config.php

    <?php 
    define('DB_USER', "login"); 
    define('DB_PASSWORD', "pass"); 
    define('DB_DATABASE', "database"); 
    define('DB_SERVER', "server"); 
?>

db_connect.php db_connect.php

<?php

/**
 * A class file to connect to database
 */
class DB_CONNECT {

    // constructor
    function __construct() {
        // connecting to database
        $this->connect();
    }

    // destructor
    function __destruct() {
        // closing db connection
        $this->close();
    }

    /**
     * Function to connect with database
     */
    function connect() {
        // import database connection variables
        require_once __DIR__ . '/db_config.php';

        // Connecting to mysql database
        $con = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD) or die(mysql_error());

        // Selecing database
        $db = mysql_select_db(DB_DATABASE) or die(mysql_error()) or die(mysql_error());

        // returing connection cursor
        return $con;
    }

    /**
     * Function to close db connection
     */
    function close() {
        // closing db connection
        mysql_close();
    }

}

?>

get_all.php get_all.php

<?php
header('Content-Type: application/json; charset=utf-8');


$response = array();

require 'db_connect.php';

$db = new DB_CONNECT();

$result = mysql_query("SELECT * FROM demo") or die(mysql_error());

if (mysql_num_rows($result) > 0) {
    $response["demo"] = array();

    while ($row = mysql_fetch_array($result)) {
        $product = array();
        $product["id"] = $row["id"];
        $product["name"] = $row["name"];
        $product["detaly"] = $row["detaly"];

        array_push($response["demo"], $product);
    }
    $response["success"] = 1;



    echo json_encode($response);


} else {
    $response["success"] = 0;
    $response["message"] = "No products found";

    echo json_encode($response);
}
?>

Android files: Android档案:

MainActivity 主要活动

 public class MainActivity extends Activity {

        //URL to get JSON Array
        private static String url = "http://ksupulse.tk/get_all.php";

        //JSON Node Names 
        private static final String TAG_USER = "detaly";
        private static final String TAG_ID = "id";
        private static final String TAG_NAME = "name";
        private static final String TAG_EMAIL = "email";

        JSONArray user = null;



        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_main);

            // Creating new JSON Parser
            JSONParser jParser = new JSONParser();

            // Getting JSON from URL
            JSONObject json = jParser.getJSONFromUrl(url);

            try {
                // Getting JSON Array
                user = json.getJSONArray(TAG_USER);
                JSONObject c = user.getJSONObject(0);

                // Storing  JSON item in a Variable
                String id = c.getString(TAG_ID);
                String name = c.getString(TAG_NAME);
                String email = c.getString(TAG_EMAIL);

                //Importing TextView
                final TextView uid = (TextView)findViewById(R.id.uid);
                final TextView name1 = (TextView)findViewById(R.id.name);
                final TextView email1 = (TextView)findViewById(R.id.email);

                //Set JSON Data in TextView
                uid.setText(id);
                name1.setText(name);
                email1.setText(email);


        } catch (JSONException e) {
            e.printStackTrace();
        }



        }

JSONParser JSONParser

public class JSONParser {

    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    // constructor
    public JSONParser() {

    }

    public JSONObject getJSONFromUrl(String url) {

        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();           

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "utf-8"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;

    }
}

This is something that I am concerned in error: 这是我担心的错误:

11-22 18:37:57.448: E/JSON Parser(1850): Error parsing data org.json.JSONException: Value  of type java.lang.String cannot be converted to JSONObject

All errors: 所有错误:

11-22 18:37:54.748: E/Trace(1850): error opening trace file: No such file or directory (2) 11-22 18:37:57.448: E/JSON Parser(1850): Error parsing data org.json.JSONException: Value of type java.lang.String cannot be converted to JSONObject 11-22 18:37:57.448: D/AndroidRuntime(1850): Shutting down VM 11-22 18:37:57.460: W/dalvikvm(1850): threadid=1: thread exiting with uncaught exception (group=0xa6265288) 11-22 18:37:57.468: E/AndroidRuntime(1850): FATAL EXCEPTION: main 11-22 18:37:57.468: E/AndroidRuntime(1850): java.lang.RuntimeException: Unable to start activity ComponentInfo{learn2crack.jsonparsing/learn2crack.jsonparsing.MainActivity}: java.lang.NullPointerException 11-22 18:37:57.468: E/AndroidRuntime(1850): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 11-22 18:37:57.468: E/AndroidRuntime(1850): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 11-22 18:37:57.468: E/AndroidRuntime(1850): at android.app.ActivityThread.acc 11-22 18:37:54.748:E / Trace(1850):错误打开跟踪文件:没有这样的文件或目录(2)11-22 18:37:57.448:E / JSON Parser(1850):解析数据组织错误.json.JSONException:无法将类型为java.lang.String的值转换为JSONObject 11-22 18:37:57.448:D / AndroidRuntime(1850):关闭VM 11-22 18:37:57.460:W / dalvikvm( 1850):threadid = 1:线程以未捕获的异常退出(group = 0xa6265288)11-22 18:37:57.468:E / AndroidRuntime(1850):致命异常:主11-22 18:37:57.468:E / AndroidRuntime( 1850):java.lang.RuntimeException:无法启动活动ComponentInfo {learn2crack.jsonparsing / learn2crack.jsonparsing.MainActivity}:java.lang.NullPointerException 11-22 18:37:57.468:E / AndroidRuntime(1850):在android上。 app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)11-22 18:37:57.468:E / AndroidRuntime(1850):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)11-22 18:37: 57.468:E / AndroidRuntime(1850):位于android.app.ActivityThread.acc ess$600(ActivityThread.java:130) 11-22 18:37:57.468: E/AndroidRuntime(1850): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 11-22 18:37:57.468: E/AndroidRuntime(1850): at android.os.Handler.dispatchMessage(Handler.java:99) 11-22 18:37:57.468: E/AndroidRuntime(1850): at android.os.Looper.loop(Looper.java:137) 11-22 18:37:57.468: E/AndroidRuntime(1850): at android.app.ActivityThread.main(ActivityThread.java:4745) 11-22 18:37:57.468: E/AndroidRuntime(1850): at java.lang.reflect.Method.invokeNative(Native Method) 11-22 18:37:57.468: E/AndroidRuntime(1850): at java.lang.reflect.Method.invoke(Method.java:511) 11-22 18:37:57.468: E/AndroidRuntime(1850): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 11-22 18:37:57.468: E/AndroidRuntime(1850): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 11-22 18:37:57.468: E/AndroidRuntime(1850): at dalvik.system.NativeStart.main(Native Method) 11-22 18:37:57.468: E/AndroidRuntime ess $ 600(ActivityThread.java:130)11-22 18:37:57.468:E / AndroidRuntime(1850):at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1195)11-22 18:37:57.468 :E / AndroidRuntime(1850):位于android.os.Handler.dispatchMessage(Handler.java:99)11-22 18:37:57.468:E / AndroidRuntime(1850):位于android.os.Looper.loop(Looper。 java:137)11-22 18:37:57.468:E / AndroidRuntime(1850):位于android.app.ActivityThread.main(ActivityThread.java:4745)11-22 18:37:57.468:E / AndroidRuntime(1850) :at java.lang.reflect.Method.invokeNative(本地方法)11-22 18:37:57.468:E / AndroidRuntime(1850):at java.lang.reflect.Method.invoke(Method.java:511)11- 22 18:37:57.468:E / AndroidRuntime(1850):位于com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786)11-22 18:37:57.468:E / AndroidRuntime(1850) :位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)11-22 18:37:57.468:E / AndroidRuntime(1850):位于dalvik.system.NativeStart.main(本机方法)11- 22 18:37:57.468:E / AndroidRuntime (1850): Caused by: java.lang.NullPointerException 11-22 18:37:57.468: E/AndroidRuntime(1850): at learn2crack.jsonparsing.MainActivity.onCreate(MainActivity.java:43) 11-22 18:37:57.468: E/AndroidRuntime(1850): at android.app.Activity.performCreate(Activity.java:5008) 11-22 18:37:57.468: E/AndroidRuntime(1850): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 11-22 18:37:57.468: E/AndroidRuntime(1850): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 11-22 18:37:57.468: E/AndroidRuntime(1850): ... 11 more 11-22 18:57:04.626: E/JSON Parser(1888): Error parsing data org.json.JSONException: Value of type java.lang.String cannot be converted to JSONObject 11-22 18:57:04.626: D/AndroidRuntime(1888): Shutting down VM 11-22 18:57:04.626: W/dalvikvm(1888): threadid=1: thread exiting with uncaught exception (group=0xa6265288) 11-22 18:57:04.626: E/AndroidRuntime(1888): FATAL EXCEPTION: main 11-22 18:57:04.626: E/AndroidRuntime(1888): java (1850):由以下原因引起:java.lang.NullPointerException 11-22 18:37:57.468:E / AndroidRuntime(1850):在learning2crack.jsonparsing.MainActivity.onCreate(MainActivity.java:43)11-22 18:37: 57.468:E / AndroidRuntime(1850):在android.app.Activity.performCreate(Activity.java:5008)11-22 18:37:57.468:E / AndroidRuntime(1850):在android.app.Instrumentation.callActivityOnCreate(Instrumentation .java:1079)11-22 18:37:57.468:E / AndroidRuntime(1850):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)11-22 18:37:57.468:E / AndroidRuntime(1850) ):...还有11个11-22 18:57:04.626:E / JSON Parser(1888):解析数据org.json.JSONException:类型为java.lang.String的值无法转换为JSONObject 11-22 18 :57:04.626:D / AndroidRuntime(1888):关闭VM 11-22 18:57:04.626:W / dalvikvm(1888):threadid = 1:线程退出且未捕获异常(group = 0xa6265288)11-22 18: 57:04.626:E / AndroidRuntime(1888):致命例外:主要11-22 18:57:04.626:E / AndroidRuntime(1888):java .lang.RuntimeException: Unable to start activity ComponentInfo{learn2crack.jsonparsing/learn2crack.jsonparsing.MainActivity}: java.lang.NullPointerException 11-22 18:57:04.626: E/AndroidRuntime(1888): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 11-22 18:57:04.626: E/AndroidRuntime(1888): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 11-22 18:57:04.626: E/AndroidRuntime(1888): at android.app.ActivityThread.access$600(ActivityThread.java:130) 11-22 18:57:04.626: E/AndroidRuntime(1888): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 11-22 18:57:04.626: E/AndroidRuntime(1888): at android.os.Handler.dispatchMessage(Handler.java:99) 11-22 18:57:04.626: E/AndroidRuntime(1888): at android.os.Looper.loop(Looper.java:137) 11-22 18:57:04.626: E/AndroidRuntime(1888): at android.app.ActivityThread.main(ActivityThread.java:4745) 11-22 18:57:04.626: E/AndroidRuntime(1888): at java.lang.reflect.Method.invokeNativ .lang.RuntimeException:无法启动活动ComponentInfo {learn2crack.jsonparsing / learn2crack.jsonparsing.MainActivity}:java.lang.NullPointerException 11-22 18:57:04.626:E / AndroidRuntime(1888):位于android.app.ActivityThread。 performLaunchActivity(ActivityThread.java:2059)11-22 18:57:04.626:E / AndroidRuntime(1888):at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)11-22 18:57:04.626:E / AndroidRuntime(1888):位于android.app.ActivityThread.access $ 600(ActivityThread.java:130)11-22 18:57:04.626:E / AndroidRuntime(1888):位于android.app.ActivityThread $ H.handleMessage(ActivityThread。 java:1195)11-22 18:57:04.626:E / AndroidRuntime(1888):位于android.os.Handler.dispatchMessage(Handler.java:99)11-22 18:57:04.626:E / AndroidRuntime(1888) :位于android.os.Looper.loop(Looper.java:137)11-22 18:57:04.626:E / AndroidRuntime(1888):位于android.app.ActivityThread.main(ActivityThread.java:4745)11-22 18:57:04.626:E / AndroidRuntime(1888):位于java.lang.reflect.Method.invokeNativ e(Native Method) 11-22 18:57:04.626: E/AndroidRuntime(1888): at java.lang.reflect.Method.invoke(Method.java:511) 11-22 18:57:04.626: E/AndroidRuntime(1888): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 11-22 18:57:04.626: E/AndroidRuntime(1888): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 11-22 18:57:04.626: E/AndroidRuntime(1888): at dalvik.system.NativeStart.main(Native Method) 11-22 18:57:04.626: E/AndroidRuntime(1888): Caused by: java.lang.NullPointerException 11-22 18:57:04.626: E/AndroidRuntime(1888): at learn2crack.jsonparsing.MainActivity.onCreate(MainActivity.java:43) 11-22 18:57:04.626: E/AndroidRuntime(1888): at android.app.Activity.performCreate(Activity.java:5008) 11-22 18:57:04.626: E/AndroidRuntime(1888): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 11-22 18:57:04.626: E/AndroidRuntime(1888): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 11-22 18:57 e(本机方法)11-22 18:57:04.626:E / AndroidRuntime(1888):at java.lang.reflect.Method.invoke(Method.java:511)11-22 18:57:04.626:E / AndroidRuntime (1888):位于com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786)11-22 18:57:04.626:E / AndroidRuntime(1888):位于com.android.internal.os。 ZygoteInit.main(ZygoteInit.java:553)11-22 18:57:04.626:E / AndroidRuntime(1888):at dalvik.system.NativeStart.main(Native Method)11-22 18:57:04.626:E / AndroidRuntime (1888):由以下原因引起:java.lang.NullPointerException 11-22 18:57:04.626:E / AndroidRuntime(1888):在learning2crack.jsonparsing.MainActivity.onCreate(MainActivity.java:43)11-22 18:57: 04.626:E / AndroidRuntime(1888):位于android.app.Activity.performCreate(Activity.java:5008)11-22 18:57:04.626:E / AndroidRuntime(1888):位于android.app.Instrumentation.callActivityOnCreate(Instrumentation .java:1079)11-22 18:57:04.626:E / AndroidRuntime(1888):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)11-22 18:57 :04.626: E/AndroidRuntime(1888): ... 11 more :04.626:E / AndroidRuntime(1888):...还有11个

  1. http://ksupulse.tk/get_all.php doesn't work and the stack trace shows 'No such file' so make sure you're passing the correct link. http://ksupulse.tk/get_all.php无法正常工作,并且堆栈跟踪显示“无此类文件”,因此请确保您传递的链接正确。
  2. Use a website such as http://www.jsoneditoronline.org/ to see exactly what's coming back. 使用诸如http://www.jsoneditoronline.org/的网站来确切了解返回的内容。 The error is in your MainActivity class when you're parsing the JSON. 解析JSON时,该错误位于MainActivity类中。 "Error parsing data org.json.JSONException: Value  of type java.lang.String cannot be converted to JSONObject". “解析数据org.json.JSONException时出错:java.lang.String类型的值不能转换为JSONObject”。 Your line JSONObject c = user.getJSONObject(0); 您的行JSONObject c = user.getJSONObject(0); needs a string passed in instead of "0." 需要传入一个字符串而不是“ 0”。

Side comment: It's not good practice to make networking calls on the main thread in Android. 旁注:在Android的主线程上进行网络调用不是一个好习惯。 Use AsyncTask. 使用AsyncTask。

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

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