2016-01-21 3 views
1

Я пытаюсь получить массив на странице PHP и показать его в ListView.Как преобразовать ArrayList в ListView?

Я пытался поставить его в ListAdapter но возникает эта проблема:

01-21 09: 13: 44,223: E/AndroidRuntime (1974): java.lang.RuntimeException: Невозможно начать деятельность ComponentInfo { com.example.e_music/com.example.e_music.ViewArtists}: java.lang.ClassCastException: java.util.ArrayList не может быть приведен к android.widget.ListAdapter

Android Код:

@SuppressLint("NewApi") public class ViewArtists extends ListActivity{ 
    // url to get all products list 
    private static String urlArtists= "http://mwssong.esy.es/android/ViewArtists.php"; 

    // JSON Node names 
    public static final String TAG_SUCCESS = "success"; 
    public static final String TAG_Artist = "Artists"; 
    public static final String TAG_id = "id"; 
    public static final String TAG_FName = "FName"; 

    ArrayList<Artist> getArtists =new ArrayList<Artist>(); 

    class Artist { 

     public String id; 
     public String FName; 
     public String LName; 
     public String Gender; 
     public String Country;  
    } 

    static ArrayList<String> ResultRow; 
    @TargetApi(Build.VERSION_CODES.GINGERBREAD) @SuppressLint("NewApi") protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.viewartists); 

     String result =""; 

     try{ 
      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 

      StrictMode.setThreadPolicy(policy); 

      HttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost("http://mwssong.esy.es/android/ViewArtists.php"); 
      HttpResponse httpResponse = httpClient.execute(httpPost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      InputStream is = httpEntity.getContent(); 

      try { 

       BufferedReader reader =new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
       StringBuilder sb = new StringBuilder(); 
       String line = null; 
       while ((line = reader.readLine()) != null) { 
        sb.append(line + "\n"); 
       } 
       is.close(); 
       result=sb.toString(); 
      }catch (Exception e){ 
       Log.e("log_tag", "error1 " + e.toString()); 

      } 

     }catch (Exception e){ 
      Log.e("log_tag","error2 " + e.toString()); 

     } 

     try{ 
      JSONArray jArray= new JSONArray(result); 
      for(int i=0; i<jArray.length();i++){ 
       JSONObject json_data =jArray.getJSONObject(i); 
       //Create new Artist: 
       Artist ArtistRow= new Artist(); 
       //Get attributes: 
       ArtistRow.id=json_data.getString("id"); 
       ArtistRow.FName=json_data.getString("FName"); 
       ArtistRow.LName=json_data.getString("LName"); 
       ArtistRow.Gender=json_data.getString("Gender"); 
       ArtistRow.Country=json_data.getString("Country"); 

       getArtists.add(ArtistRow); 
      } 
     }catch (Exception e){ 
      Log.e("log_tag","error3 " + e.toString()); 

     } 

     ArrayAdapter<Artist> adapter = new ArrayAdapter<Artist>(this, android.R.layout.simple_list_item_1, getArtists); 
     ListView myListView =(ListView)findViewById(R.id.lvArtist); 
     myListView.setAdapter(adapter); 
} 
} 
+0

Если вы отформатируете свой код лучше, вам будет лучше, а также тем, кто пытается вам помочь. – Rohit5k2

+0

Я программист asp .. и я новичок в android и java .. извините за это. –

+0

Здесь 'myListView.setAdapter ((ListAdapter) getArtists);' не является правильным способом создания объекта Adapter. см. следующий учебник [Как создать пользовательский список - пример Android] (http://androidexample.com/How_To_Create_A_Custom_Listview_-_Android_Example/index.php?view=article_discription&aid=67&aaid=92) –

ответ

1

Как говорится в ошибке, вы не можете наложить ArrayList на номер ListAdapter.

Если у вас есть:

ArrayList<String> arrayList = new ArrayList<String>(); 

Вы должны создать адаптер непосредственно:

private ArrayAdapter arrayAdapter = 
    new ArrayAdapter(this, android.R.layout.simple_list_item_1, arrayList); 

Затем используйте его:

listView.setAdapter(arrayAdapter); 
+0

Это дало мне странные вещи в Посмотреть список!! странный идентификатор или что-то в этом роде !! Список: [email protected] –

+0

Я попытался это: 'ArrayAdapter адаптер = новый ArrayAdapter (это, android.R.layout.simple_list_item_1, getArtists),' ' ListView MyListView = (ListView) findViewById (R.id.lvArtist); ' ' myListView.setAdapter (адаптер); ' –

+0

Значения приходят, и я могу показать их в TextView .., но не в ListView .. –

0

Вы путаете две вещи - список данных & список адаптер. Адаптер отвечает за создание представлений и предоставление их списку, в то время как данные хорошо ... просто данные (в вашем случае Strings).

Предлагаю вам использовать ArrayAdapter (http://developer.android.com/reference/android/widget/ArrayAdapter.html). Ваш код должен выглядеть так:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, getArtists); 
ListView myListView =(ListView)findViewById(R.id.lvArtist); 
myListView.setAdapter(adapter); 
+0

Это дало мне странные вещи в просмотр списка! странный идентификатор или что-то в этом роде !! Список: com.пример[email protected] –

+0

Я попытался это: 'ArrayAdapter адаптер = новый ArrayAdapter (это, android.R.layout.simple_list_item_1, getArtists),' ' ListView MyListView = (ListView) findViewById (R.id. lvArtist); ' ' myListView.setAdapter (адаптер); ' –

+0

Вероятно, это вызов метода toString() для Artist. Если вы переопределите эту функцию, она должна дать вам то, что вы хотите. –

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