Ok Ich bin ziemlich neu in Android und reaktive Programmierung und ich habe in den letzten zwei Tagen versucht, eine Aktivität zu machen, die Beiträge von einem Server erhält und lädt sie in eine Post [ ] das wird später in meiner App verwendet. Das Problem hier ist, dass, wenn ich diesen Post [] an die displayPostsMethod übergeben, es null ist. Hier ist der Code in der AktivitätRxAndroid 2.0.1 Subscribe-Methode setzt keine Variable
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);
});
}
}
Und hier ist auch der Code aus der getAllPostsMethod in PostsProvider Klasse.
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);
});
}
Können Sie Ihren JSON? –
Ich denke nicht, dass es von der JSON ist, weil ich versuchte, okhttp überhaupt nicht zu verwenden und jsut emitt hardcoded Post [] in der GetAllPosts() und es tut immer noch das gleiche. –
Also haben Sie versucht, 'this.displayPosts (posts);' nach unten von 'this.postsToDispaly = Arrays.copyOf (posts, posts.length);'? –