2012-10-15 184 views
1

我使用从http://www.androidhive.info/2012/01/android-json-parsing-tutorial/在解析时使用JSON

当我运行的应用程序的示例空例外,它说,我有一个java.lang.nullexception错误! 我没有修改应用程序中的任何内容。

这是处理活动:

public class AndroidJSONParsingActivity extends ListActivity { 

// url to make request 
private static String url = "http://api.androidhive.info/contacts/"; 

// JSON Node names 
private static final String TAG_CONTACT = "contacts"; 
private static final String TAG_ID = "id"; 
private static final String TAG_NAME = "name"; 
private static final String TAG_EMAIL = "email"; 
private static final String TAG_ADDRESS = "address"; 
private static final String TAG_GENDER = "gender"; 
private static final String TAG_PHONE = "phone"; 
private static final String TAG_PHONE_MOBILE = "mobile"; 
private static final String TAG_PHONE_HOME = "home"; 
private static final String TAG_PHONE_OFFICE = "office"; 

// contacts JSONArray 
JSONArray contacts = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Hashmap for ListView 
    ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>(); 

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

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

    try { 
     // Getting Array of Contacts 
     contacts = json.getJSONArray(TAG_CONTACT); 

     // looping through All Contacts 
     for(int i = 0; i < contacts.length(); i++){ 
      JSONObject c = contacts.getJSONObject(i); 

      // Storing each json item in variable 
      String id = c.getString(TAG_ID); 
      String name = c.getString(TAG_NAME); 
      String email = c.getString(TAG_EMAIL); 
      String address = c.getString(TAG_ADDRESS); 
      String gender = c.getString(TAG_GENDER); 

      // Phone number is agin JSON Object 
      JSONObject phone = c.getJSONObject(TAG_PHONE); 
      String mobile = phone.getString(TAG_PHONE_MOBILE); 
      String home = phone.getString(TAG_PHONE_HOME); 
      String office = phone.getString(TAG_PHONE_OFFICE); 

      // creating new HashMap 
      HashMap<String, String> map = new HashMap<String, String>(); 

      // adding each child node to HashMap key => value 
      map.put(TAG_ID, id); 
      map.put(TAG_NAME, name); 
      map.put(TAG_EMAIL, email); 
      map.put(TAG_PHONE_MOBILE, mobile); 

      // adding HashList to ArrayList 
      contactList.add(map); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 


    /** 
    * Updating parsed JSON data into ListView 
    * */ 
    ListAdapter adapter = new SimpleAdapter(this, contactList, 
      R.layout.list_item, 
      new String[] { TAG_NAME, TAG_EMAIL, TAG_PHONE_MOBILE }, new int[] { 
        R.id.name, R.id.email, R.id.mobile }); 

    setListAdapter(adapter); 

    // selecting single ListView item 
    ListView lv = getListView(); 

    // Launching new screen on Selecting Single ListItem 
    lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      // getting values from selected ListItem 
      String name = ((TextView) view.findViewById(R.id.name)).getText().toString(); 
      String cost = ((TextView) view.findViewById(R.id.email)).getText().toString(); 
      String description = ((TextView) view.findViewById(R.id.mobile)).getText().toString(); 

      // Starting new intent 
      Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class); 
      in.putExtra(TAG_NAME, name); 
      in.putExtra(TAG_EMAIL, cost); 
      in.putExtra(TAG_PHONE_MOBILE, description); 
      startActivity(in); 

     } 
    }); 



} 

}

这是我的解析器:

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, "iso-8859-1"), 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; 

} 

}

这是我的logcat输出:

4月10日至一十五日:06:21.879:E /缓存器的错误(292):错误转换结果显示java.lang.NullPointerException

10-15 04:06:21.879: E/JSON Parser(292): Error parsing data org.json.JSONException: End of input at character 0 of 

10-15 04:06:21.889: D/AndroidRuntime(292): Shutting down VM 

10-15 04:06:21.889: W/dalvikvm(292): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 

10-15 04:06:21.899: E/AndroidRuntime(292): FATAL EXCEPTION: main 

10-15 04:06:21.899: E/AndroidRuntime(292): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.androidhive.jsonparsing/com.androidhive.jsonparsing.AndroidJSONParsingActivity}: java.lang.NullPointerException 

10-15 04:06:21.899: E/AndroidRuntime(292): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 

10-15 04:06:21.899: E/AndroidRuntime(292): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 

10-15 04:06:21.899: E/AndroidRuntime(292): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 

10-15 04:06:21.899: E/AndroidRuntime(292): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 

10-15 04:06:21.899: E/AndroidRuntime(292): at android.os.Handler.dispatchMessage(Handler.java:99) 

10-15 04:06:21.899: E/AndroidRuntime(292): at android.os.Looper.loop(Looper.java:123) 

10-15 04:06:21.899: E/AndroidRuntime(292): at android.app.ActivityThread.main(ActivityThread.java:4627) 

10-15 04:06:21.899: E/AndroidRuntime(292): at java.lang.reflect.Method.invokeNative(Native Method) 

10-15 04:06:21.899: E/AndroidRuntime(292): at java.lang.reflect.Method.invoke(Method.java:521) 

10-15 04:06:21.899: E/AndroidRuntime(292): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 

10-15 04:06:21.899: E/AndroidRuntime(292): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 

10-15 04:06:21.899: E/AndroidRuntime(292): at dalvik.system.NativeStart.main(Native Method) 

10-15 04:06:21.899: E/AndroidRuntime(292): Caused by: java.lang.NullPointerException 

10-15 04:06:21.899: E/AndroidRuntime(292): at com.androidhive.jsonparsing.AndroidJSONParsingActivity.onCreate(AndroidJSONParsingActivity.java:58) 

10-15 04:06:21.899: E/AndroidRuntime(292): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 

10-15 04:06:21.899: E/AndroidRuntime(292): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 

10-15 04:06:21.899: E/AndroidRuntime(292): ... 11 more 
+0

你给“互联网”权限? – Praveenkumar

+1

那么,AndroidJSONParsingActivity.java的第58行是什么? –

+0

@SpK是的,我已经做到了。 – Lene

回答

0
Error parsing data org.json.JSONException: End of input at character 0 

json是空的。 Web服务不返回任何数据。因此它不能被解析。

+0

'url'是一个有效的JSON文件:http://api.androidhive.info/contacts/ – Muz

+0

尝试打印出你的logcat中的sb.toString()。 – Ashwani