首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在线阅读JSON android

在线阅读JSON android
EN

Stack Overflow用户
提问于 2013-05-16 17:51:29
回答 2查看 1.7K关注 0票数 0

我有一个在线JSON文件,看起来像这样:

代码语言:javascript
复制
{  
    "iPadVersion": "1.0",
    "AndroidVersion": "1.0"
}

我试着这样读它(这部分代码是用AsyncTask编写的):

代码语言:javascript
复制
JSONParser jParser = new JSONParser();
JSONObject json = jParser.getJSONFromUrl("http://mylink/db.json");
String str = "tmp";

            try {
                  str = json.getString("AndroidVersion");
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


            Log.d(TAG, ""+str);

我总是在log.d得到"tmp“,它不工作。

StactTrace:

代码语言:javascript
复制
    05-16 12:54:08.605: W/System.err(20406): java.io.FileNotFoundException: /http:/mylink/db.json: open failed: ENOENT (No such file or directory)
    05-16 12:54:08.605: W/System.err(20406):    at libcore.io.IoBridge.open(IoBridge.java:406)
    05-16 12:54:08.605: W/System.err(20406):    at java.io.FileInputStream.<init>(FileInputStream.java:78)
    05-16 12:54:08.605: W/System.err(20406):    at java.io.FileInputStream.<init>(FileInputStream.java:105)
    05-16 12:54:08.605: W/System.err(20406):    at java.io.FileReader.<init>(FileReader.java:66)
    05-16 12:54:08.605: W/System.err(20406):    at com.weterworks.JSONParser.getJSONFromUrl(JSONParser.java:37)
    05-16 12:54:08.605: W/System.err(20406):    at com.weterworks.MainActivity$sync.<init>(MainActivity.java:359)
    05-16 12:54:08.605: W/System.err(20406):    at com.weterworks.MainActivity.onCreate(MainActivity.java:263)
    05-16 12:54:08.605: W/System.err(20406):    at android.app.Activity.performCreate(Activity.java:4465)
    05-16 12:54:08.605: W/System.err(20406):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
    05-16 12:54:08.605: W/System.err(20406):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
    05-16 12:54:08.605: W/System.err(20406):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
    05-16 12:54:08.605: W/System.err(20406):    at android.app.ActivityThread.access$600(ActivityThread.java:123)
    05-16 12:54:08.605: W/System.err(20406):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
    05-16 12:54:08.605: W/System.err(20406):    at android.os.Handler.dispatchMessage(Handler.java:99)
    05-16 12:54:08.605: W/System.err(20406):    at android.os.Looper.loop(Looper.java:137)
    05-16 12:54:08.605: W/System.err(20406):    at android.app.ActivityThread.main(ActivityThread.java:4424)
    05-16 12:54:08.605: W/System.err(20406):    at java.lang.reflect.Method.invokeNative(Native Method)
    05-16 12:54:08.615: W/System.err(20406):    at java.lang.reflect.Method.invoke(Method.java:511)
    05-16 12:54:08.615: W/System.err(20406):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    05-16 12:54:08.615: W/System.err(20406):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    05-16 12:54:08.615: W/System.err(20406):    at dalvik.system.NativeStart.main(Native Method)
    05-16 12:54:08.615: W/System.err(20406): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
    05-16 12:54:08.615: W/System.err(20406):    at libcore.io.Posix.open(Native Method)
    05-16 12:54:08.615: W/System.err(20406):    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
    05-16 12:54:08.615: W/System.err(20406):    at libcore.io.IoBridge.open(IoBridge.java:390)
    05-16 12:54:08.615: W/System.err(20406):    ... 20 more
    05-16 12:54:08.615: W/System.err(20406): org.json.JSONException: No value for AndroidVersion
    05-16 12:54:08.615: W/System.err(20406):    at org.json.JSONObject.get(JSONObject.java:354)
    05-16 12:54:08.615: W/System.err(20406):    at org.json.JSONObject.getString(JSONObject.java:510)
    05-16 12:54:08.615: W/System.err(20406):    at com.weterworks.MainActivity$sync.doInBackground(MainActivity.java:404)
    05-16 12:54:08.615: W/System.err(20406):    at com.weterworks.MainActivity$sync.doInBackground(MainActivity.java:1)
    05-16 12:54:08.615: W/System.err(20406):    at android.os.AsyncTask$2.call(AsyncTask.java:264)
    05-16 12:54:08.615: W/System.err(20406):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
    05-16 12:54:08.625: W/System.err(20406):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
    05-16 12:54:08.625: W/System.err(20406):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
    05-16 12:54:08.625: W/System.err(20406):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
    05-16 12:54:08.625: W/System.err(20406):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
    05-16 12:54:08.625: W/System.err(20406):    at java.lang.Thread.run(Thread.java:856)

JsonParser类:

代码语言:javascript
复制
public class JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

// constructor
public JSONParser() {

}

public JSONObject getJSONFromUrl(String url) {


    try {
        BufferedReader reader = new BufferedReader(new FileReader(url));
        String line, results = "";
        while ((line = reader.readLine()) != null) {
            results += line;
        }
        reader.close();

        jObj = new JSONObject(results);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return jObj;

     }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-17 23:01:32

您正在尝试从URL读取数据,但您在流链中使用的是FileReader。这是行不通的,因为FileReader将其字符串参数解释为本地系统上的一个文件(请参阅Javadoc)。

您需要做的是使用HTTP库从给定的URL下载数据,然后将其解析为JSON对象。我使用SDK中内置的HTTP类展示了一个示例:

代码语言:javascript
复制
public class JSONParser {
    private static final String USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31";

    public JSONObject getJSONFromUrl(String url) {

        try {
            final HttpURLConnection connection = (HttpURLConnection) new URL(
                    url).openConnection();
            connection.setRequestProperty("User-Agent", USER_AGENT);

            if (connection.getResponseCode() == 200) {
                final BufferedReader reader = new BufferedReader(
                        new InputStreamReader(connection.getInputStream()));

                String line = null;
                final StringBuffer buffer = new StringBuffer(4096);
                while ((line = reader.readLine()) != null) {
                    buffer.append(line);
                }
                reader.close();

                final JSONObject jObj = new JSONObject(buffer.toString());
                return jObj;
            } else {
                return null;
            }

        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (JSONException e) {
            throw new RuntimeException(e);
        }
    }
}

附注:您可以在项目中包含Jackson,并使用以下一行代码,而不是为此创建自己的解析实用程序:

代码语言:javascript
复制
final JsonNode jsonObj = new ObjectMapper().readTree(new URL(
        "http://www.example.com/json"));
票数 3
EN

Stack Overflow用户

发布于 2013-05-16 17:59:22

检查您的服务器链接并正确使用它。我认为,您的服务器URL有问题。记录您的url字符串,并尝试通过浏览器获取它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16584200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档