Android-display JSONArray in Listview mit Daten aus der API (website)

Ich bin sehr neu auf Android und habe eine Aufgabe, die für die Anzeige einer Liste von Genres, die von einer API
Ich habe keine Ahnung, was Los ist. Ich erfolgreich eine normale listview mit hartkodierten Daten. Aber jetzt brauche ich für die Verwendung von REST-Diensten und mit dem Netzwerk verbinden und die Anzeige von Daten in einem listview.

Meine XML ist sehr einfach, nur ein listview

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
    <ListView
       android:id="@+id/lstView"
       android:layout_height="wrap_content"
       android:layout_width="match_parent">
    </ListView>
</LinearLayout>

Danach habe ich meine Klasse. Ich habe zwei (2) Fehler momentan. Die erste ist zu versuchen, um die Zeichenfolge zurückgegeben, die von der API in ein JSONArray. Die zweite nur entschieden auftreten, durch sayuing das symbol R kann nicht aufgelöst werden. Keine Ahnung, wie das passiert ist.

Anyway, hier ist mein code:

import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;


public class Genre extends Activity {
    ListView listView;
    private static final String DEBUG_TAG = "HttpExample";

    @Override
    protected void onCreate(Bundle savedInstanceState)  {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_view);

        listView = (ListView) findViewById(R.id.lstView);

       ConnectivityManager connMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

        String result=null;
      try {
             result = downloadUrl();
        }catch(IOException e)
        {}

        ArrayList<String> lstData = new ArrayList<String>();
        JSONArray jarray = (JSONObject)result; //ERROR HERE
        try {
            if (jarray != null) {
                for (int i = 0; i < jarray.length(); i++) {
                    lstData.add(jarray.get(i).toString());
                }
            }
        }catch(JSONException j)
        {}

       ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, lstData);

       listView.setAdapter(adapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                int itemPosition = position;

                String itemValue = (String) listView.getItemAtPosition(position);

                Toast.makeText(getApplicationContext(), "Position :" + itemPosition + " ListItem :" + itemValue, Toast.LENGTH_LONG).show();
            }
        });
    }

    private String downloadUrl() throws IOException{
        InputStream is = null;

        int len = 500;

        try{
            URL url = new URL("website here");
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            conn.setReadTimeout(10000);
            conn.setConnectTimeout(15000);
            conn.setRequestMethod("GET");
            conn.setDoInput(true);
            conn.connect();
            int response = conn.getResponseCode();
            Log.d(DEBUG_TAG,"The response is: " + response);
            is = conn.getInputStream();
            String contentAsString = readIt(is, len);
            return contentAsString;
        }finally{
            if(is != null){
                is.close();
            }
        }
    }

    public String readIt(InputStream stream, int len) throws IOException{
        Reader reader = null;
        reader = new InputStreamReader(stream, "UTF-8");
        char[] buffer = new char[len];
        reader.read(buffer);
        return new String(buffer);
    }
}

Ich kommentiert habe den Abschnitt, der gibt mir Fehler. Das R-symbol ist aber eine andere Geschichte. Wenn ich könnte nur erhalten Sie die app, um erfolgreich zurückzukehren und konvertieren das JSONArray, dass wäre toll.

Habe ich kopiert und eingefügt die meisten, wenn nicht alle, der code von verschiedenen websites und StackOverflow selbst nach einer Antwort zu suchen.

JSON-Daten, erhalte ich:

{"genres":[{"id":28,"name":"Action"},{"id":12,"name":"Adventure"},{"id":16,"name":"Animation"},{"id":35,"name":"Comedy"},{"id":80,"name":"Crime"},{"id":99,"name":"Documentary"},{"id":18,"name":"Drama"},{"id":10751,"name":"Family"},{"id":14,"name":"Fantasy"},{"id":10769,"name":"Foreign"},{"id":36,"name":"History"},{"id":27,"name":"Horror"},{"id":10402,"name":"Music"},{"id":9648,"name":"Mystery"},{"id":10749,"name":"Romance"},{"id":878,"name":"Science-Fiction"},{"id":10770,"name":"TV Movie"},{"id":53,"name":"Thriller"},{"id":10752,"name":"Krieg"},{"id":37,"name":"Western"}]}

Ich würde gerne die Anzeige der Namen für jetzt, aber ich kann gehen, für beide ID und name.
Hilfe wäre sehr geschätzt werden. Danke
Auch, bitte Kommentar, wenn Sie weitere Daten benötigen

  • nur Namen in der Listen-Ansicht?
  • JSONArray jarray = (JSONObject)result; //ERROR HERE wirklich ?
  • Wie kann man typecasting Ihre json-Ergebnis jsonobject und dann die Zuordnung zu jsonarray
  • gehen Sie durch diese androidhive.info/2014/07/...
  • JSON mit Retrofit2 Beispiel freakyjolly.com/...
Schreibe einen Kommentar