Android:从Rails API加载数据时出现JSONException

时间:2015-03-06 17:50:19

标签: android ruby-on-rails json parsing

我在Android应用中解析来自Rails API的JSON响应时遇到问题。 我的Android应用程序中有一个相当标准的json解析器。当我用教程中的一些JSON url(例如这个:http://demo.codeofaninja.com/tutorials/json-example-with-php/index.php)提供它时,似乎工作得很好。 但只要我把链接(我使用隧道到我的localhost) - 它无法解析任何数据并给出

JSONException: Value of type java.lang.String cannot be converted to JSONObject

所以我认为问题在于我的服务器响应。在浏览器响应中看起来像

{
"items": [
    {
        "title": "Sometitle",
        "address": "Someaddress"
    },
    {
        "title": "Sometitle2",
        "address": "Someaddress2"
    }
]
}

和json验证器显示它是有效的。我研究过类似的问题并没有找到解决方案,我不知道是什么原因。有人可以建议解决方案吗?

UPD。我的实际Android代码:

public class JsonParser {

final String TAG = "JsonParser.java";

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

public JSONObject getJSONFromUrl(String url) {

    // make HTTP request
    try {

        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();          

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {

        BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line).append("\n");
        }
        is.close();
        json = sb.toString();

    } catch (Exception e) {
        Log.e(TAG, "Error converting result " + e.toString());
    }

    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e(TAG, "Error parsing data " + e.toString());
    }

    // return JSON String
    return jObj;
}

}

然后在我的活动中:

          JsonParser jParser = new JsonParser();

          // get json string from url
          JSONObject json = jParser.getJSONFromUrl(ITEMS_URL);

          // get the array of items
          dataJsonArr = new JSONArray(json);

2 个答案:

答案 0 :(得分:1)

实际问题是请求使用HttpPost,这应该是一个HttpGet。

由于服务器端的请求映射,API的响应可能是错误响应。

答案 1 :(得分:-1)

这可能是服务器方面的问题,在你从攻击服务器进行响应的方法中,你必须首先在String变量中获得响应,尝试从那里得到响应,可能是你从那里得到了正确的响应..