【问题标题】:JSON fetch URL content for AndroidJSON 获取 Android 的 URL 内容
【发布时间】:2011-01-18 12:20:12
【问题描述】:

朋友们, 我在直接从给定 http://samplejson.com/transactions.json 的 url 解析 json 内容时遇到问题,但是当我将相同的 url 内容存储为我的 res/raw 文件夹中的文本文件时,它也会解析数据,但是当从 net 获取 url 内容时它显示了一个异常(即) JSONArray 文本必须在...的第 1 个字符处以 '[' 开头

这里出了什么问题。帮我解决这个问题


URL url_net = new URL("http://samplejson.com/transactions.json"); 
InputStream is = url_net.openStream(); 
byte [] buffer = new byte[is.available()]; 
while (is.read(buffer) != -1); 
String jsontext = new String(buffer); 
JSONArray entries = new JSONArray(jsontext); 
x = "JSON parsed.\nThere are [" + entries.length() + "]\n\n"; 
int i; 
for (i=0;i<entries.length();i++) { }

【问题讨论】:

  • 好的,发布你必须从 HTTP 获取文本并加载 JSON 的代码。我查看了 JSON 本身,没问题。
  • URL url_net = new URL("184.106.227.45/quaddeals/university-of-illinois/androids/…); InputStream is = url_net.openStream(); byte [] buffer = new byte[is.available()]; while (is.read( buffer) != -1); String jsontext = new String(buffer); JSONArray entries = new JSONArray(jsontext); x = "JSON 已解析。\n有 [" + entries.length() + "]\n\n "; int i; for (i=0;i

标签: android json


【解决方案1】:

好的,您的代码似乎正在读取包括标头在内的所有 HTTP。这就是为什么你的不以“[”开头的原因。

这是我用来取回 HTTP GET 的字符串内容的代码:

public static String getStringContent(String uri) throws Exception {

    try {
        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet();
        request.setURI(new URI(uri));
        HttpResponse response = client.execute(request);
        InputStream ips  = response.getEntity().getContent();
        BufferedReader buf = new BufferedReader(new InputStreamReader(ips,"UTF-8"));

        StringBuilder sb = new StringBuilder();
        String s;
        while(true )
        {
            s = buf.readLine();
            if(s==null || s.length()==0)
                break;
            sb.append(s);

        }
        buf.close();
        ips.close();
        return sb.toString();

        } 
    finally {
               // any cleanup code...
            }
        } 

【讨论】:

  • 注意响应。getEntity().getContent() 指的是 HTTP 负载。
  • 更简洁的方法是使用String content = client.execute(request, new BasicResponseHandler()),这样可以节省十几行:)
  • 谢谢戴夫。不知道 BasicResponseHandler()。
  • 感谢您的回答。我得到了解决方案。
猜你喜欢
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 2014-01-24
  • 1970-01-01
相关资源
最近更新 更多