java - 在 Android Studio 中将 JSON 解析为 List [java]

标签 java android json

我是 Java 的新手,现在我想解析来自 API 请求的数据。我已经测试了 JSONParse 中的所有类,但没有成功。

我使用由 Mini Sharma

我还从它返回的 URL 准备了一个 JSON:

{
        "code": "100",
        "message": "success",
        "data": [
           {
               "FullName": "Marcelius Dagpin",
               "Email": "mardagz@gmail.com",
               "Android_ID": "e88244s1606091f6"
           }
        ],
        "time": "0.88044500350952 ms"
}

我的方法:

class PostRegistration extends AsyncTask<String, Void, Boolean> {
    private ProgressDialog pgDialog;
    //On Execute Progress
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pgDialog.setMessage("Please wait while processing your registration");
        pgDialog.setTitle("Processing");
        pgDialog.show();
        pgDialog.setCancelable(false);
    }

    @Override
    protected void onPostExecute(final Boolean status) {
        if(pgDialog.isShowing()) {
            pgDialog.dismiss();
        }
    }

    //Running on background
    @Override
    protected Boolean doInBackground(String... args) {
        JSONParser jsonParser = new JSONParser();

        try {
            JSONArray json = jsonParser.getJSONFromURL(args[0]); //http://localhost/dev/?request=post&type=user&value=VALUEHERE
            JSONObject jsono = json.getJSONObject(0);

            Log.d("Tag", jsono.toString());
        }catch(Exception e) {
            e.printStackTrace();
        }

        return null;
    }

}

我在运行这段代码时遇到错误。

这是日志:

    02-27 02:00:00.077    2180-2180/com.sprikiwiki_lab.dev.practice1 E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.sprikiwiki_lab.dev.practice1, PID: 2180
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sprikiwiki_lab.dev.practice1/com.sprikiwiki_lab.dev.practice1.RegistrationActivity}: java.lang.NullPointerException: println needs a message
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2318)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396)
            at android.app.ActivityThread.access$800(ActivityThread.java:139)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:149)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException: println needs a message
            at android.util.Log.println_native(Native Method)
            at android.util.Log.println_filter(Log.java:105)
            at android.util.Log.d(Log.java:166)
            at com.sprikiwiki_lab.dev.practice1.RegistrationActivity.onCreate(RegistrationActivity.java:79)
            at android.app.Activity.performCreate(Activity.java:5411)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396)
            at android.app.ActivityThread.access$800(ActivityThread.java:139)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:149)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
            at dalvik.system.NativeStart.main(Native Method)
02-27 02:00:01.367    2180-2180/com.sprikiwiki_lab.dev.practice1 I/Process﹕ Sending signal. PID: 2180 SIG: 9

老实说。

任何人都可以帮助我或提出建议。

谢谢

最佳答案

我分析了您的代码,发现了一些问题。我将逐步描述它:

首先在 android 中,当您想要连接互联网时,您必须在您的 list 中注册权限。

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

第二点是如何设置DATA_URL

这里你初始化一个变量

private static String DATA_URL = null;

在这里你要设置它

   try {
        //...
        String DATA_URL = "http://dev.sprikiwiki-lab.com/?request=get&uid=1";
    }catch (Exception e) {
      //...
    }

但是您创建了新变量 - 您必须像下面这样删除 String:

   try {
        //...
        DATA_URL = "http://dev.sprikiwiki-lab.com/?request=get&uid=1";
    }catch (Exception e) {
        //...
    }

此外,您还可以删除静态 :)

下一个问题是在 getJSONFromUrl 方法内部。您将 url 作为参数传递,但您什么都不做。改线打击:

     HttpGet httpGet = new HttpGet();

用这个:

     HttpGet httpGet = new HttpGet(url);

最后一期是关于你的方法的结尾。您创建 new JSONArray(builder);。您应该在此处创建 newJSONObject(builder),如下所示:

     //Parse string to JSON object
    try {
        jarray = new JSONObject(builder.toString());
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    //Return json to array
    return jarray;

此外,您必须将 jarray 的类型更改为 JSONObject 并返回 getJSONFromURL 方法的类型

关于java - 在 Android Studio 中将 JSON 解析为 List [java],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28749717/

相关文章:

android - apktool 没有生成 apk 文件

main 中的 java.lang.ExceptionInInitializerError

java - 从 dom 文档创建 json

json - Postgres 选择 jsonb 数组包含另一个数组中的一个或多个元素的位置

java - 如何在 Ivy 或 Maven 中指定 net.sf.json-lib#json-lib#2.3?

java - 是否可以使用 Java 突出显示 *.txt 文件中的字符串?

java - 将二次方程解析为命令行输入

android - 首次运行应用程序时显示首选项屏幕和相关问题

java - 按照线程启动的顺序完成线程

MySQL JSON_OBJECT + CONCAT & GROUP_CONCAT 作为别名 & 截断/最大长度