繁体   English   中英

json解析错误NullPointerException

[英]json-parsing errors NullPointerException

下面的代码非常简单,唯一的目标是获取json数据。 我把json放在字符串中并获取特定的数据,然后它给了我null指针异常,我一直在google上寻找解决方案,但我真的不明白我在做什么错...请帮助我是android开发上的新手

这是MainActivity类

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    TextView tv = (TextView)findViewById(R.id.Text);

    String strJson="{\n"+
            "    \"Template\": {\n"+
            "        \"id\": \"32229\",\n"+
            "        \"Sheet\": {\n"+
            "            \"id\": \"T1\",\n"+
            "            \"Layout\": {\n"+
            "                \"id\": \"L1\",\n"+
            "                \"name\": \"AndroidLayout1\",\n"+
            "                \"type\": \"RelativeLayout\",\n"+
            "                \"width\": \"1022\",\n"+
            "                \"height\": \"300\",\n"+
            "                \"background-color\": \"none\",\n"+
            "                \"border-top\": \"none\",\n"+
            "                \"border-right\": \"none\",\n"+
            "                \"border-bottom\": \"none\",\n"+
            "                \"border-left\": \"none\",\n"+
            "                \"Control\": [\n"+
            "                    {\n"+
            "                        \"id\": \"C1\",\n"+
            "                        \"name\": \"TextBox2\",\n"+
            "                        \"type\": \"TextBox\",\n"+
            "                        \"left\": \"300\",\n"+
            "                        \"top\": \"69\",\n"+
            "                        \"width\": \"200\",\n"+
            "                        \"height\": \"40\",\n"+
            "                        \"background-color\": \"rgb(102, 255, 255)\",\n"+
            "                        \"border-width\": \"2px\",\n"+
            "                        \"border-color\": \"rgb(204, 0, 0)\"\n"+
            "                    },\n"+
            "                    {\n"+
            "                        \"id\": \"C3\",\n"+
            "                        \"name\": \"ButtonBox4\",\n"+
            "                        \"type\": \"ButtonBox\",\n"+
            "                        \"left\": \"437\",\n"+
            "                        \"top\": \"199\",\n"+
            "                        \"width\": \"140\",\n"+
            "                        \"height\": \"40\",\n"+
            "                        \"background-color\": \"none\",\n"+
            "                        \"border-top\": \"none\",\n"+
            "                        \"border-right\": \"none\",\n"+
            "                        \"border-bottom\": \"none\",\n"+
            "                        \"border-left\": \"none\"\n"+
            "                    },\n"+
            "                    {\n"+
            "                        \"id\": \"C5\",\n"+
            "                        \"name\": \"Calendar6\",\n"+
            "                        \"type\": \"Calendar\",\n"+
            "                        \"left\": \"656\",\n"+
            "                        \"top\": \"169\",\n"+
            "                        \"width\": \"120\",\n"+
            "                        \"height\": \"40\"\n"+
            "                    }\n"+
            "                ]\n"+
            "            }\n"+
            "        }\n"+
            "    }\n"+
            "}";

    String data = "";
    try {
        // Create the root JSONObject from the JSON string.
   JSONObject  jsonRootObject = new JSONObject(strJson);

   //Get the instance of JSONArray that contains JSONObjects
       JSONArray jsonArray = jsonRootObject.optJSONArray("Layout");

       //Iterate the jsonArray and print the info of JSONObjects
       for(int i=0; i < jsonArray.length(); i++){
           JSONObject jsonObject = jsonArray.getJSONObject(i);

           int id = Integer.parseInt(jsonObject.optString("id").toString());
           String name = jsonObject.optString("name").toString();
           float type = Float.parseFloat(jsonObject.optString("type").toString());

           data += "Node"+i+" : \n id= "+ id +" \n Name= "+ name +" \n Type= "+ type +" \n ";
         }

      tv.setText(data);

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

这是清单文件

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.dynamicparse"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="21" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.dynamicparse.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

这是logcat错误

   11-15 08:54:11.412: E/AndroidRuntime(1478): FATAL EXCEPTION: main
11-15 08:54:11.412: E/AndroidRuntime(1478): Process: com.example.dynamicparse, PID: 1478
11-15 08:54:11.412: E/AndroidRuntime(1478): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.dynamicparse/com.example.dynamicparse.MainActivity}: java.lang.NullPointerException
11-15 08:54:11.412: E/AndroidRuntime(1478):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
11-15 08:54:11.412: E/AndroidRuntime(1478):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
11-15 08:54:11.412: E/AndroidRuntime(1478):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
11-15 08:54:11.412: E/AndroidRuntime(1478):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
11-15 08:54:11.412: E/AndroidRuntime(1478):     at android.os.Handler.dispatchMessage(Handler.java:102)
11-15 08:54:11.412: E/AndroidRuntime(1478):     at android.os.Looper.loop(Looper.java:136)
11-15 08:54:11.412: E/AndroidRuntime(1478):     at android.app.ActivityThread.main(ActivityThread.java:5017)
11-15 08:54:11.412: E/AndroidRuntime(1478):     at java.lang.reflect.Method.invokeNative(Native Method)
11-15 08:54:11.412: E/AndroidRuntime(1478):     at java.lang.reflect.Method.invoke(Method.java:515)
11-15 08:54:11.412: E/AndroidRuntime(1478):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
11-15 08:54:11.412: E/AndroidRuntime(1478):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
11-15 08:54:11.412: E/AndroidRuntime(1478):     at dalvik.system.NativeStart.main(Native Method)
11-15 08:54:11.412: E/AndroidRuntime(1478): Caused by: java.lang.NullPointerException
 11-15 08:54:11.412: E/AndroidRuntime(1478):    at com.example.dynamicparse.MainActivity.onCreate(MainActivity.java:87)
11-15 08:54:11.412: E/AndroidRuntime(1478):     at android.app.Activity.performCreate(Activity.java:5231)
11-15 08:54:11.412: E/AndroidRuntime(1478):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
11-15 08:54:11.412: E/AndroidRuntime(1478):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
11-15 08:54:11.412: E/AndroidRuntime(1478):     ... 11 more

这样做,但未经测试。

 try {
        JSONObject jsonRootObject=new JSONObject(str);

        JSONObject templateObj=jsonRootObject.getJSONObject("Template");
        JSONObject sheetObj=templateObj.getJSONObject("Sheet");
        JSONObject layoutObj=sheetObj.getJSONObject("Layout");
        String layoutId=layoutObj.getString("id");
        String layoutName=layoutObj.getString("name");



        JSONArray controArr=layoutObj.getJSONArray("Control");
        for(int i=0;i<controArr.length();i++){
            JSONObject controlObj=controArr.getJSONObject(i);
            String controlId=controlObj.getString("id");
            String controlName=controlObj.getString("name");




        }



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

暂无
暂无

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

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