我正在尝试从https://yts.lt/api/v2/list_movies.json
获取数据这是我的代码:
series: [{
data: [{
y: 9.5,
MYVALUE: 95
}],
dataLabels: {
format: '<div style="text-align:center"><span style="font-size:25px;color:' +
((Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black') + '">{MYVALUE}</span><br/>' +
'<span style="font-size:12px;color:silver"></span></div>'
},
}]
主要活动:
public class ApiClient {
private final static String DOMAIN = "https://yts.lt/api";
private final static String API = "/v2/list_movies.json/";
private final static String BASE_URL = String.format("%s%s", DOMAIN, API);
private static Retrofit retrofit = null;
//Retrofit
public static Retrofit getInstance() {
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
public interface ApiService {
//how to create the GET?
@GET("all")
Single<List<Movie>> getAllMovies();
}
电影:
public class MainActivity extends AppCompatActivity {
private ApiService apiService;
private CompositeDisposable mDisposable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDisposable = new CompositeDisposable();
apiService = ApiClient.getInstance().create(ApiService.class);
mDisposable.add(apiService.getAllMovies().
subscribeOn(Schedulers.io()).
observeOn(AndroidSchedulers.mainThread()).
subscribeWith(new DisposableSingleObserver<List<Movie>>() {
@Override
public void onSuccess(final List<Movie> movies) {
Log.d(TAG,"Sucess");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, String.format("onError: %s", e.getMessage()), e);
}
})
);
}
}
错误:
public class Movie implements Serializable {
@SerializedName("title")
private String title;
public String getNameTitle() {
return title;
}
}
电影数组位于对象►数据►电影► 我需要得到吗?你能帮我如何创建@GET
答案 0 :(得分:1)
您的端点返回类型的结构不正确。它应具有与端点响应相同的结构。您应该创建以下类:
class MoviesResponse {
@SerializedName("data")
MoviesData data;
...
}
class MoviesData {
@SerializedName("movies")
List<Movie> data;
...
}
class Movie {
@SerializedName("title")
String title;
...
}
请注意,您应该在每个类中添加所需的属性,例如,在MoviesResponse
中,您还可以像在JSON响应中一样添加status
字段。
然后将您的服务更改为具有返回类型的MoviesResponse
public interface ApiService {
@GET("all")
Single<MoviesResponse> getAllMovies();
}
答案 1 :(得分:1)
好吧,我认为您需要稍微搜索一下如何使用GSON解析JSON。
StackOverflow上有很多很好的答案。
您将需要在迭代Array时选择性地解析所需内容并构造Movie
对象,或者创建代表JSON给定的上述结构的所有模型对象,并让GSON解析为您的对象。
您不能做的事都不是以上两者。
通过“快速”查看您的JSON(我讽刺地说是因为它巨大……),我可以看到它的结构是这样的:
类为()
,字段为lower_case
ResponseRoot()
status,
status_message
Data()
limit,
movie_count,
etc.,
MoviesList()
Movie()
id, url, etc..
Genres() //this is a List<String> from what I see
Torrents() // list<Torrent>
date_uploaded,
date_uploaded_unix
Movie()
Movie()
Movie()
...
像这样的金田。因此,当事物是JSON数组时,java中的等效项就是List。
ofThatThing
是您必须在字段中提供的类。
例如:
上述用于Movie的“伪类”看起来像:(简化,我没有复制所有字段)
class Movie {
int id;
String url;
String imdb_code;
...
List<String> genres;
String summary;
List<Torrent> torrents;
}
您需要拥有Torrent对象,以便...
class Torrent {
String url;
String hash;
String quality;
etc..
}
您明白了。