Java json解析问题
我试图解析从lastfm返回的json数据。 我感兴趣的方法是album.search 文档要求有相册名称的搜索词和api键,我在这里已经完成了:Java json解析问题,java,android,arrays,json,Java,Android,Arrays,Json,我试图解析从lastfm返回的json数据。 我感兴趣的方法是album.search 文档要求有相册名称的搜索词和api键,我在这里已经完成了: String api_key = "x"; String url = "http://ws.audioscrobbler.com/2.0/?method=album.search" + "&album=" + query + "&apikey=" + api_key + "&f
String api_key = "x";
String url = "http://ws.audioscrobbler.com/2.0/?method=album.search" +
"&album="
+ query
+ "&apikey="
+ api_key
+ "&format=json";
然后,我的问题是尝试遍历json数据,这样我就可以得到我想要的值,在我的例子中是name,所以我创建了一个数组来循环遍历json文件
boolean error = false;
HttpClient httpclient = null;
try {
httpclient = new DefaultHttpClient();
HttpResponse data = httpclient.execute(new HttpGet(url));
HttpEntity entity = data.getEntity();
String result = EntityUtils.toString(entity, "UTF8");
for ( int i = 0; i < results.length(); i++) {
JSONObject row = new JSONObject(result);
albummatches = row.getString("albummatches");
album = row.getString("album");
name = row.getString("name");
results.getJSONObject(i).get("album");
现在在我的另一个类中,我试图通过此方法将相册的名称附加到适配器列表视图
public void ServiceComplete(AbstractService service) {
if (!service.hasError()) {
AlbumSearchService albumService = (AlbumSearchService)service;
String[] result = new String[albumService.getResults().length()];
for (int i = 0; i < albumService.getResults().length(); i++) {
try{
result[i] = albumService.getResults().getJSONObject(i).getString("name");
} catch (JSONException ex) {
result[i] = "Error";
}
}
setListAdapter(new ArrayAdapter<String>(this, R.layout.album_list_cell, R.id.text, result));
}
公共void服务完成(抽象服务){
如果(!service.hasError()){
AlbumSearchService albumService=(AlbumSearchService)服务;
字符串[]结果=新字符串[albumService.getResults().length()];
对于(int i=0;i
但不幸的是,当我尝试运行应用程序并搜索相册时,它只是停留在“搜索…”状态,不会在我的列表视图中显示任何结果
我不知道我哪里出错了:(帮助某人!你确定你从http请求中获得了JSON字符串吗?如果没有,请尝试检查实体的内容(
result
),以查看您是否实际获得了所需的内容。在第二个代码段中,您迭代了一个变量results
,但在前一行,您将响应存储在字符串result
中。什么是results
?它是数组还是键入错误,应该是result
?如果results
是String
,为什么要迭代字符串。length
?结果是jsonarray,结果是json字符串。抱歉,但这段代码很混乱。你迭代一个数组,你想用一个你称之为“行”的东西填充它,它(在最好的情况下)是一个json字符串(在每次迭代中都是相同的)。行结果。getJSONObject(i).get(“album”);
对我来说毫无意义。使用调试器,逐行检查代码。检查变量的内容,你肯定会找到应用程序挂起的那一行(除了一些惊喜)。
public void ServiceComplete(AbstractService service) {
if (!service.hasError()) {
AlbumSearchService albumService = (AlbumSearchService)service;
String[] result = new String[albumService.getResults().length()];
for (int i = 0; i < albumService.getResults().length(); i++) {
try{
result[i] = albumService.getResults().getJSONObject(i).getString("name");
} catch (JSONException ex) {
result[i] = "Error";
}
}
setListAdapter(new ArrayAdapter<String>(this, R.layout.album_list_cell, R.id.text, result));
}