Ich habe gerade angefangen zu schreiben meine erste Android-App und ich habe ein Problem. Ich weiß nicht, wie man eine HTTP-Antwort richtig behandelt. Ich habe einen Weg gefunden, eine GET-Anfrage zu erstellen (mit okhttp) und den Weg gefunden, die Antwort mit Callable zu behandeln. Ich bekomme Array meiner Objekte und muss dann einen neuen Adapter für RecycleView (mit diesem Array) erstellen, aber ich kann den Adapter nicht vom Haupt-Thread aus einstellen. Ich weiß nicht, wie man Daten von diesem Callable bekommt.Android-Behandlung HTTP-Antwort
Antrag
public static void getDonerPoints() {
try {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("http://192.168.2.64:9000/donerPoint/get?count=100&orderBy=rating&orderDirection=asc")
.build();
client.newCall(request).enqueue(
new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d("mLog", "request error");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
try {
final ArrayList<DonerPoint> points = new ArrayList<>();
if (response.code() == HttpURLConnection.HTTP_OK) {
JSONArray jsonArray = new JSONArray(response.body().string());
ObjectMapper mapper = new ObjectMapper();
for (int i = 0; i < jsonArray.length(); i++)
points.add(mapper.readValue(jsonArray.getString(i), DonerPoint.class));
ListFragment.setNewContentForAdapter(points);
Log.d("mLog", "ok");
}
} catch (Exception exc) {
Log.d("mLog", exc.toString());
}
}
});
} catch (Exception exc) {
}
}
Rahmen Adapter
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.list_tab, container, false);
mRecyclerView = (RecyclerView) rootView.findViewById(R.id.rv);
mLayoutManager = new LinearLayoutManager(getContext());
mRecyclerView.setLayoutManager(mLayoutManager);
return rootView;
}
public static void setNewContentForAdapter(List<DonerPoint> points){
mAdapter=new PointAdapter(points);
mRecyclerView.setAdapter(mAdapter);
}
Und Excexption
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
Vielleicht brauche ich es nicht in statischen Kontext zu tun?
Bitte schreiben einige Code zu veranschaulichen, was Sie bisher haben. –