【问题标题】:How to use the java-json library in Android如何在 Android 中使用 java-json 库
【发布时间】:2014-09-08 09:12:00
【问题描述】:

我有一个从 Internet 获取 XML 数据的 AsyncTask。我想将它转换成 JSON 并使用 java-json 库。但是应用程序在我身上崩溃了。这是异步任务

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

提前感谢您的帮助。

【问题讨论】:

  • 请显示方法 XML.toJsonObject()
  • @Vlad 是java-json.jar库中的一个方法
  • @BidhanA 您应该在问题中明确说明您正在使用外部库。在“org.json”的上下文中不清楚,因为它包含在 Android SDK 中。
  • @Vlad 抱歉,我不知道。

标签: android xml json


【解决方案1】:

您是否尝试过使用 google-gson? Google GSON

IMO,我认为这是解决 JSON 问题的更快方法。

【讨论】:

  • GSON 是否提供 XML 到 JSON 的转换?如果不是,这不是问题的答案。
  • GSON 似乎没有任何与 XML 相关的 API。
猜你喜欢
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
  • 2019-12-07
  • 2011-07-08
  • 2019-05-19
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多