我必须使用改装和显示来解析以下JSON。
https://api.flickr.com/services/rest/?method=flickr.photos.getRecent
当我尝试运行我的应用程序时,我遇到了以下错误:
预期BEGIN_ARRAY,但被BEGIN_OBJECT在第1行第2列路径$
我的代码如下
MainActivity.java
package com.example.siva.gallery;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class MainActivity extends AppCompatActivity {
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listview);
//calling the method to display the heroes
getPhoto();
}
private void getPhoto() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Api.BASE_URL)
.addConverterFactory(GsonConverterFactory.create()) //Here we are using the GsonConverterFactory to directly convert json data to object
.build();
Api api = retrofit.create(Api.class);
Call<List<Photo>> call = api.getPhoto("flickr.photos.getRecent","6f102c62f41998d151e5a1b48713cf13","json","1","url_s");
call.enqueue(new Callback<List<Photo>>() {
@Override
public void onResponse(Call<List<Photo>> call, Response<List<Photo>> response) {
List<Photo> photoList = response.body();
//Creating an String array for the ListView
String[] photos = new String[photoList.size()];
//looping through all the heroes and inserting the names inside the string array
for (int i = 0; i < photoList.size(); i++) {
photos[i] = photoList.get(i).getTitle();
}
//displaying the string array into listview
listView.setAdapter(new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, photos));
}
@Override
public void onFailure(Call<List<Photo>> call, Throwable t) {
Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
}
Photo.java
package com.example.siva.gallery;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Photo {
@SerializedName("id")
@Expose
private String id;
@SerializedName("title")
@Expose
private String title;
@SerializedName("url_s")
@Expose
private String urlS;
public Photo(String mId, String mTitle, String mUrls ){
id = mId;
title = mTitle;
urlS = mUrls;
}
public String getId() {
return id;
}
public String getTitle() {
return title;
}
public String getUrlS() {
return urlS;
}
}
一个pi.interface
package com.example.siva.gallery;
import java.util.List;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;
public interface Api {
String BASE_URL = "https://api.flickr.com/";
@GET("services/rest/")
Call<List<Photo>> getPhoto(@Query("method")String method, @Query("api_key") String api_key, @Query("format") String format, @Query("nojsoncallback") String nojsoncallback, @Query("extras") String extras);
}
我找不到问题所在。
public class PhotosResult {
@SerializedName("photos")
private Photos photos;
@SerializedName("stat")
private String stat;
public Photos getPhotos() {
return photos;
}
public void setPhotos(Photos photos) {
this.photos = photos;
}
public String getStat() {
return stat;
}
public void setStat(String stat) {
this.stat = stat;
}
}
public class Photos {
@SerializedName("photo")
private List<Photo> photo = null;
public List<Photo> getPhoto() {
return photo;
}
public void setPhoto(List<Photo> photo) {
this.photo = photo;
}
}
因此需要更改api返回类型如下
Call<PhotosResult> getPhoto
下面是修改后的onResponse方法。
@Override
public void onResponse(Call<PhotosResult> call, Response<PhotosResult> response) {
PhotosResult result = response.body();
for (Photo photo: result.getPhotos().getPhoto()) {
//photo.getTitle();
}
}
一、整体思路 从使用方法出发,首先是怎么使用,其次是我们使用的功能在内部是如何实现的,实现方案上有什么技巧,有什么范式。全文基本上是对 Retrofit 源码的一个分析与导读,非常建议大家下载 Retrofit 源码之后,跟着本文,过一遍源码。 二、基本用例 2.1 创建 Retrofit 对象 Retrofit retrofit = new Retrofit.Builder() .bas
问题内容: 我有动态JSON,下面是示例:http : //pastebin.com/QMWRZTrD 如何使用翻新解析? 我没有生成POJO类,因为我有诸如“ 5411”和“ 5412”之类的动态字段。 编辑 : 我通过使用Map来解决它,因为第一个值始终是整数,第二个是对象列表。 问题答案: 如果使用随机键,则可以用来序列化和反序列化。
问题内容: 这是我对Web服务的JSONArray响应: 这是ApiInterface.java 这是方法和响应的调用: 到目前为止,它失败了,这里是logcat输出: 它无法执行响应。指导我分析此响应。 问题答案: 请尝试使用这个 如果您遇到任何问题,请告诉我。
本文向大家介绍python numpy数组复制使用实例解析,包括了python numpy数组复制使用实例解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了python numpy数组复制使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在使用python时我们经常会处理数组,有的时候是复制有的时候不是,这里也是初学者最容
问题内容: 我创建了一个简单的REST端点: 此URL返回一个非常简单的响应,其中包含 json数组 ,如下所示: 现在,我尝试 使用带有GSON的Retrofit 2 来 使用此响应 。 我添加了一个模型: 和服务: 我实例化了一个改造: 而我的服务: 现在,尝试调用数据: 最终导致异常: java.lang.IllegalStateException : 预期为BEGIN_OBJECT,但 位
如何使用JSON. parse恢复方法编辑某个值。我只想编辑每个声明为姓氏的键并返回新值。