2015-12-28 2 views
-2

Я очень новичок в Android и задал задачу, чтобы отобразить список жанров из API У меня нет подсказки относительно того, что происходит. Я успешно реализовал обычный список с жестко кодированными данными. Но теперь мне нужно использовать службы REST и подключаться к сети и отображать данные в списке.Android-дисплей JSONArray в Listview с данными из API (сайт)

Мой XML является очень простой, просто 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> 

После этого, у меня есть класс. В настоящее время у меня две (2) ошибки. Первый пытается получить строку, возвращенную из API, в JSONArray. Второй просто решил произойти, скажем, символ R не может быть разрешен. Не знаю, как это произошло.

Во всяком случае, вот мой код:

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); 
    } 
} 

я прокомментировал раздел, который дает мне ошибки. Символ R - это еще одна история. Если бы я мог просто заставить приложение успешно вернуться и преобразовать JSONArray, это было бы здорово.

Я скопировал и вставлял большинство, если не все, код с различных сайтов и сам StackOverflow, который искал ответ.

данные JSON я получаю:

{ "жанры": [{ "ID": 28, "имя": "Действие"}, { "ID": 12, "имя": "Приключение"}, { "идентификатор": 16, "название": "Анимация"}, { "идентификатор": 35, "название": "Комедия"}, { "идентификатор": 80, "название": "Преступление "}, {" ID ": 99," имя ":" Документальный фильм "}, {" ID ": 18," имя ":" Драма "}, {" ID ": 10751," имя ":" Семья "} , { "ID": 14, "имя": "фантазия"}, { "ID": 10769, "имя": "Иностранные"}, { "ID": 36, "имя": "История"}, { "идентификатор": 27, "имя": "Ужас"}, { "ID": 10402, "имя": "Музыка"}, { "ID": 9648, "имя": "Тайна"}, { "идентификатор ": 10749," name ":" Romance "}, {" id ": 878," name ":" Science Fiction "}, {" id ": 10770," name ":" TV Movie "}, {" id ": 53," name ":" Thriller "}, {" id ": 10752," name ":" War "}, {" id ": 37," name ":" Western "}]}

Я бы хотел отобразить это имя на данный момент, но я могу пойти как для ID, так и для имени. Помощь была бы очень признательна. Спасибо Кроме того, пожалуйста, комментарий, если вам нужно больше данных

+0

только имена в виде списка? –

+0

'JSONArray jarray = (JSONObject) result; // ОШИБКА ЗДЕСЬ', правда? – Blackbelt

+0

Как вы можете придать jsonobject ваш json-результат, а затем присвоить его jsonarray – Pankaj

ответ

1

Ваш результат является строкой Json, так что вам нужно, чтобы получить JSONArray так:

JSONObject obj = new JSONObject(result); 
JSONArray jarray = obj.getJSONArray("genres"); 

Помните поймать исключение.

+1

все еще имеет ошибку, не может передать java.lang.String в org.json.JSONArray –

Смежные вопросы