2013-02-19 129 views
-1

我正在寫一個android應用程序,應該從parse.com數據庫獲取歌曲數據並顯示它與自定義列表視圖。我的Android應用程序不顯示與自定義適配器的ListView

我試過Nitin的建議,但仍然沒有得到任何listview顯示。

這是新代碼:

package de.android; 

import java.util.ArrayList; 
import java.util.List; 

import android.app.ListActivity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageButton; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.TextView; 

import com.parse.FindCallback; 
import com.parse.Parse; 
import com.parse.ParseObject; 
import com.parse.ParseQuery; 


public class Lyrics extends ListActivity { 



    ImageButton back; 
    ListView songList; 
    TextView textAnzeige; 
    private ArrayList<String> Titelliste = new ArrayList<String>(); 
    private ArrayList<String> Interpretliste = new ArrayList<String>(); 
    private ArrayList<String> Dauerliste = new ArrayList<String>(); 

    ProgressDialog dialog; 



    @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_lyrics); 

      Parse.initialize(this, "hGxasGU6e0WQAOh5JIOGDfvFBKrYyBJKXIzxBfAG", "WsOPsXerpsFjsjekKKbZnnjAHvXy5PQHVQEB8Cqu"); 




      initDataToView(); 


     } 

    private void initDataToView() { 


     new getData().execute(); 
     songList = (ListView)findViewById(android.R.id.list); 

    } 

    private class getData extends AsyncTask<Void, Void, SongAdapter>{ 

     ProgressDialog dialog; 
     @Override 
     protected void onPreExecute() { 
      dialog = new ProgressDialog(Lyrics.this); 
      dialog.setMessage("Please wait, while loading!"); 
      dialog.setIndeterminate(true); 
      dialog.setCancelable(false); 
      dialog.show(); 
      Log.d("Parse", "PreExecute"); 
     } 

     @Override 
     protected SongAdapter doInBackground(Void... params) { 



      ParseQuery pq = new ParseQuery("SongDatenbank"); 
      pq.whereExists("Titel"); 
      pq.findInBackground(new FindCallback() { 

       @Override 
       public void done(List<ParseObject> liederListe, 
         com.parse.ParseException e) { 
        if(e==null){ 
         Log.d("Parse", "Objektliste empfangen"); 

          ParseObject x; 

         for(int i=0;i<liederListe.size();i++){ 
          x = liederListe.get(i); 
          Titelliste.add(x.getString("Titel")); 
          Dauerliste.add(x.getString("Dauer")); 
          Interpretliste.add(x.getString("Interpret")); 
         } 
         initDataToView(); 

         x = liederListe.get(0); 

         Log.d("Parse", x.getString("Titel")); 
         Log.d("Parse", x.getString("Dauer")); 
         Log.d("Parse", x.getString("Interpret")); 


        }else{ 

         Log.d("Parse", "Objektliste nicht empfangen"); 
        } 
       } 


      }); 



      return null; 
     } 

     protected void onPostExecute(SongAdapter result) { 

      songList.setAdapter(result); 

      dialog.dismiss(); 
      Log.d("Parse", "Postexecute"); 
     } 


    } 





    public class SongAdapter extends ArrayAdapter<String> { 
     private final Context context; 
     private final ArrayList<String> valuesTitel; 
     private final ArrayList<String> valuesInterpret; 
     private final ArrayList<String> valuesDauer; 


      public SongAdapter(Context context, ArrayList<String> valuesTitel, ArrayList<String> valuesInterpret, ArrayList<String> valuesDauer) { 
      super(context, R.layout.list_row); 
      this.context = context; 
      this.valuesTitel = valuesTitel; 
      this.valuesInterpret = valuesInterpret; 
      this.valuesDauer = valuesDauer; 
      } 



      public View getView(int position, View convertView, ViewGroup parent){ 
       LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

       View rowView = inflater.inflate(R.layout.list_row, parent, false); 
       ImageView imageView = (ImageView)rowView.findViewById(R.id.list_image); 
       TextView titelText = (TextView)rowView.findViewById(R.id.title); 
       TextView artistText = (TextView)rowView.findViewById(R.id.artist); 
       TextView duration = (TextView)rowView.findViewById(R.id.duration); 



       titelText.setText(valuesTitel.get(position)); 
       artistText.setText(valuesInterpret.get(position)); 
       duration.setText(valuesDauer.get(position)); 
       Log.d("Parse", valuesTitel.get(position)); 
       return rowView; 



      } 












    }} 

我認爲這個問題是在解析數據,並給他們的適配器的參數。 任何想法如何?

我真的很感激它,如果有人可以通過我的代碼來幫助我解決問題。

感謝,保羅

+0

不要從其他或後臺線程更新ui。 – Nitin 2013-02-19 11:09:32

回答

-1

沒有在適配器類中沒有getCount方法,試試下面的代碼

@Override 
    public int getCount() 
    { 
     return x.size();// number of datas in the list . 
    } 

這種方法指定的時間進行自動填充getView數量。

............還有一個suggession是使用extend BaseAdapter代替ArrayAdapter<String>

1

我建議你做一個處理程序來更新用戶界面或使用的AsyncTask

Update UI from Thread

檢查的第一個答案的鏈接它講述長時間操作doInBackground方法,你應該獲取的數據和onPostExecute設置適配器

在閱讀評論以下代碼。

private class PrepareAdapter1 extends AsyncTask<Void,Void,ContactsListCursorAdapter > { 
    ProgressDialog dialog; 
    @Override 
    protected void onPreExecute() { 
     dialog = new ProgressDialog(viewContacts.this); 
     dialog.setMessage(getString(R.string.please_wait_while_loading)); 
     dialog.setIndeterminate(true); 
     dialog.setCancelable(false); 
     dialog.show(); 
    } 
    /* (non-Javadoc) 
    * @see android.os.AsyncTask#doInBackground(Params[]) 
    */ 
    @Override 
    protected ContactsListCursorAdapter doInBackground(Void... params) { 

     //do here parsing 

     return adapter1; 
    } 



    protected void onPostExecute(ContactsListCursorAdapter result) { 
      dialog.dismiss(); 
    //Set Adapter 
      list.setAdapter(result); 

     } 
    } 
+0

我想過這個,但是我怎樣才能改變或引用list_row.xml中定義的listView元素的元素? – 2013-02-19 11:24:47

+0

檢查更新的答案 – Nitin 2013-02-19 11:28:43

+0

因此,我讓我的SongAdapter類擴展AsyncTask? – 2013-02-19 11:41:56

0

檢查R.layout.list_row。這是正確設計或沒有。即佈局的高度和寬度都是fill_parent。因爲從你的代碼一切看起來很好。

相關問題