2014-09-08 3 views
0

У меня есть AsyncTask, которая извлекает XML-данные из Интернета. Я хочу преобразовать его в JSON и использовать библиотеку java-json. Но приложение падает на меня. Это AsyncTaskКак использовать библиотеку java-json в Android

private class GetBlogPostsTask extends AsyncTask<Object, Void, JSONObject> { 

    @Override 
    protected JSONObject doInBackground(Object... arg0) { 
     int responseCode = -1; 
     JSONObject jsonResponse = null; 
     try { 
      URL blogFeedUrl = new URL("some url"); 
      HttpURLConnection connection = (HttpURLConnection) blogFeedUrl.openConnection(); 
      connection.connect(); 
      responseCode = connection.getResponseCode(); 
      if (responseCode == HttpURLConnection.HTTP_OK) { 
       InputStream inputStream = connection.getInputStream(); 
       ByteArrayOutputStream out = new ByteArrayOutputStream(); 
       byte[] buffer = new byte[1024]; 
       for (int count; (count = inputStream.read(buffer)) != -1;) { 
       out.write(buffer, 0, count); 
       } 
       byte[] response = out.toByteArray(); 
       String responseData = new String(response, "UTF-8"); 
       Log.d("TAG", responseData); 
       try { 
        jsonResponse = XML.toJSONObject(responseData); 
       } catch (JSONException e) { 
        Log.e("JSON exception", e.getMessage()); 
        e.printStackTrace(); 
       } 

      } else { 
       Log.i(TAG, "Unsuccessful HTTP Response Code: " 
         + responseCode); 
      } 
     } catch (MalformedURLException e) { 
      logException(e); 
     } catch (IOException e) { 
      logException(e); 
     } catch (Exception e) { 
      logException(e); 
     } 

     return jsonResponse; 
    } 

Я успешно извлекать данные XML, потому что я могу видеть его в LogCat. Я думаю, что моя проблема в том, что я не использую библиотеку должным образом. Logcat показывает следующие сообщения об ошибках при сбое приложения

09-08 04:58:42.262: E/AndroidRuntime(1112): FATAL EXCEPTION: AsyncTask #1 
09-08 04:58:42.262: E/AndroidRuntime(1112): Process: com.example.xmltojsontest, PID: 1112 
09-08 04:58:42.262: E/AndroidRuntime(1112): java.lang.RuntimeException: An error occured while executing doInBackground() 
09-08 04:58:42.262: E/AndroidRuntime(1112):  at android.os.AsyncTask$3.done(AsyncTask.java:300) 
09-08 04:58:42.262: E/AndroidRuntime(1112):  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
09-08 04:58:42.262: E/AndroidRuntime(1112):  at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 
09-08 04:58:42.262: E/AndroidRuntime(1112):  at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
09-08 04:58:42.262: E/AndroidRuntime(1112):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
09-08 04:58:42.262: E/AndroidRuntime(1112):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
09-08 04:58:42.262: E/AndroidRuntime(1112):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
09-08 04:58:42.262: E/AndroidRuntime(1112):  at java.lang.Thread.run(Thread.java:841) 
09-08 04:58:42.262: E/AndroidRuntime(1112): Caused by: java.lang.NoSuchMethodError: org.json.XMLTokener.end 
09-08 04:58:42.262: E/AndroidRuntime(1112):  at org.json.XMLTokener.nextCDATA(XMLTokener.java:69) 
09-08 04:58:42.262: E/AndroidRuntime(1112):  at org.json.XML.parse(XML.java:165) 
09-08 04:58:42.262: E/AndroidRuntime(1112):  at org.json.XML.parse(XML.java:272) 
09-08 04:58:42.262: E/AndroidRuntime(1112):  at org.json.XML.parse(XML.java:272) 
09-08 04:58:42.262: E/AndroidRuntime(1112):  at org.json.XML.parse(XML.java:272) 
09-08 04:58:42.262: E/AndroidRuntime(1112):  at org.json.XML.toJSONObject(XML.java:369) 
09-08 04:58:42.262: E/AndroidRuntime(1112):  at com.example.xmltojsontest.MainActivity$GetBlogPostsTask.doInBackground(MainActivity.java:168) 
09-08 04:58:42.262: E/AndroidRuntime(1112):  at com.example.xmltojsontest.MainActivity$GetBlogPostsTask.doInBackground(MainActivity.java:1) 
09-08 04:58:42.262: E/AndroidRuntime(1112):  at android.os.AsyncTask$2.call(AsyncTask.java:288) 
09-08 04:58:42.262: E/AndroidRuntime(1112):  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
09-08 04:58:42.262: E/AndroidRuntime(1112):  ... 4 more 

Заранее благодарю вас за помощь.

+0

Просьба показать метод XML.toJsonObject() – 0101100101

+0

@ Vlad Это метод в библиотеке java-json.jar –

+0

вы используете класс XML из https://github.com/douglascrockford/JSON-java/blob/ master/XML.java – praveen

ответ

-1

Вы пытались использовать google-gson? Google GSON

IMO, я думаю, что это более быстрое решение ваших проблем JSON.

+0

Предоставляет ли GSON XML для преобразования JSON? Если нет, это не ответ на вопрос. – 0101100101

+0

У GSON нет API-интерфейса, связанного с XML. – UnknownStack

Смежные вопросы