2012-02-02 5 views
0

Я использую парсер Jackson JSON, поскольку я слышал, что он был намного более эффективен, чем парсер Android по умолчанию. Я узнал, как использовать его с этого урока здесьAndroid Jackson JSON Parser null value

http://www.mkyong.com/java/jackson-streaming-api-to-read-and-write-json/

который отлично учебник, если кто-то хочет, чтобы узнать, как использовать Jackson JSON парсер.

Однако у меня возникла проблема в том, что я могу разбирать данные в Java с URL-адреса, однако, когда я использую Jackson с Android, я получаю нулевые значения или экран по какой-то причине просто черным.

Для того, чтобы восстановить данные с сайта я использую этот код здесь

http://www.javacodegeeks.com/2011/01/android-json-parsing-gson-tutorial.html

private InputStream retrieveStream(String url) { 

    DefaultHttpClient client = new DefaultHttpClient(); 

    HttpGet getRequest = new HttpGet(url); 

    try { 

     HttpResponse getResponse = client.execute(getRequest); 
     final int statusCode = getResponse.getStatusLine().getStatusCode(); 

     if (statusCode != HttpStatus.SC_OK) { 
      Log.w(getClass().getSimpleName(), 
       "Error " + statusCode + " for URL " + url); 
      return null; 
     } 

     HttpEntity getResponseEntity = getResponse.getEntity(); 
     return getResponseEntity.getContent(); 

    } 
    catch (IOException e) { 
     getRequest.abort(); 
     Log.w(getClass().getSimpleName(), "Error for URL " + url, e); 
    } 

    return null; 

} 

Тогда в моем методе данных синтаксического анализа

 InputStream source = retrieveStream(url); 

    try { 

     JsonFactory jfactory = new JsonFactory(); 


     JsonParser jParser = jfactory.createJsonParser(source); 

Затем я анализирую данные, был показан в учебнике I, приведенном выше

while (jParser.nextToken() != JsonToken.END_OBJECT) { 

      String fieldname = jParser.getCurrentName(); 
      if ("Name".equals(fieldname)) { 
       jParser.nextToken(); 
       this.setName(jParser.getText()); 
      } 
      if ("Number".equals(fieldname)) { 
       jParser.nextToken(); 
       this.setNumber(jParser.getText()); 
      } 
     } 

URL-адрес, который я использую, - это созданный фиктивный сайт, на котором есть только файл JSON, который я использую для разбора парсера Jackson JSON.

Теперь я знаю, что мой код данных синтаксического анализа в порядке, так как я в обычном Java-классе, я могу проанализировать данные с сайта с помощью кода, который я создал, и он отлично работает.

Однако, если я попытаюсь использовать код на Android с кодом, который я только что показал, я просто получаю черный экран по какой-то странной причине. У меня есть разрешения на доступ к интернету в манифесте

Есть ли что-то не так с кодом http, который я использовал? Если бы кто-нибудь мог показать мне, как это должно быть сделано? А также почему я получаю черный экран, я не понимаю, почему он это показал.

Заранее спасибо

+1

Вы знаете, что теперь у андроида есть официальная поддержка JSON в API. , , – Mob

+1

Я знаю это, но Джексон JSON должен быть намного быстрее, и именно поэтому я выбрал его – AdamM

+0

@AdamM couhld, пожалуйста, укажите, где находится ошибка? – JoxTraex

ответ

0

Я нашел проблему, ссылка была локальным хостом, с которым невозможно было получить доступ с эмулятора. Настройки были изменены и теперь доступны для ссылки, теперь они отлично работают: D

0

Не уверен, если это проблема, но ваша перекручивание конструкция небезопасна: в зависимости от вида данных, которые вы получаете, то вполне возможно, что вы не получите END_OBJECT как следующий знак. И в конце содержимого nextToken() вернет значение null, чтобы указать конец ввода. Так, возможно, вы попадаете в бесконечный цикл с определенным входом?