【发布时间】:2017-12-15 16:43:18
【问题描述】:
好吧,我对 android 和响应式编程还很陌生,过去两天我一直在尝试创建一个活动,从服务器获取帖子并将它们加载到 Post[] 中,稍后在我的应用程序中使用。这里的问题是,当我将该 Post[] 传递给 displayPostsMethod 时,它为空。这是Activity中的代码
public class HomeActivity extends AppCompatActivity{
private Post[] postsToDisplay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
//get the posts from the server
this.getPostsFromServer();
//dispaly the posts
this.displayPosts(posts);// here are the posts null
}
public void getPostsFromServer() {
PostsProvider.getAllPosts()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(posts -> {
this.postsToDispaly = Arrays.copyOf(posts, posts.length);
});
}
}
这也是 PostsProvider 类中 getAllPostsMethod 的代码。
public static Observable<Post[]> getAllPosts(){
return Observable.create((ObservableEmitter<Post[]> e) -> {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("sample url")
.build();
Response response = client.newCall(request).execute();
String json = response.body().string();
Gson gson = new Gson();
Post[] posts = gson.fromJson(json, Post[].class);
e.onNext(posts);
});
}
【问题讨论】:
-
可以把你的json放上去吗?
-
我不认为它来自 json,因为我试图根本不使用 okhttp 并且在 getAllPosts() 中发出硬编码 Post[] 并且它仍然这样做。
-
那么您是否尝试将
this.displayPosts(posts);移动到this.postsToDispaly = Arrays.copyOf(posts, posts.length);的下方? -
是的,不幸的是我试过它仍然产生相同的结果
标签: android observable rx-java2 rx-android okhttp3