2016-04-08 6 views
-1

Bir sunucudan bir JSON ile bir ListView doldurmaya çalışıyorum. Verileri sunucudan alıyorum ancak ListView'e nasıl yerleştireceğimi anlayamıyorum. Aldığım hata onResponse'de.Retrofit 2'yi kullanarak Liste Görünümü'nü doldurun

Şöyle ki: "Hata: (84, 54) hatası: Sınıf JucatoriLiberiArrayAdapter içinde yapıcı JucatoriLiberiArrayAdapter verilen türlerine uygulanamaz; gerekli: Bağlam, ArrayList bulundu: gerçek argüman Çağrı> olamaz: FragmentActivity,> nedeni Çağrı ArrayList'e yöntem çağırma dönüşümü ile dönüştürülebilir "

Sanırım her bir Alt + Enter düzeltmeyi denedim. Ayrıca, Call<ArrayList<FreePlayers> türünü yalnızca ArrayList<> veya yalnızca Call<> olarak değiştirmeye çalıştı.

@Override 
     public void onActivityCreated(final Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState); 


      HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
      interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
      OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build(); 

      final Retrofit builder = new Retrofit.Builder() 
        .addConverterFactory(GsonConverterFactory.create()) 
        .client(client) 
        .baseUrl(ROOT) 
        .build(); 

      REST_CLIENT = builder.create(API.class); 


      final Call<FreePlayers> request = REST_CLIENT.getFreePlayers(1); 
      request.enqueue(new Callback<FreePlayers>() { 
       @Override 
       public void onResponse(final Call<FreePlayers> call, final Response<FreePlayers> response) { 
        ArrayList<FreePlayers> players = null; 

        players = call; 

        ListView lv = (ListView) getView().findViewById(android.R.id.list); 

        JucatoriLiberiArrayAdapter adapter = new JucatoriLiberiArrayAdapter(getActivity(), 
          players); 

        lv.setAdapter(adapter); 


       } 

       @Override 
       public void onFailure(final Call<FreePlayers> call, final Throwable t) { 

       } 
      }); 


     } 

Benim API arayüzü:

Bu

benim sınıftır

public interface API { 

    @FormUrlEncoded 
    @POST("/fan-sport/app-test/") 
    Call<ArrayList<FreePlayers>> getFreePlayers(@Field("getFreePlayers") int freePlayers); 

} 

Ve bu benim özel adaptör geçerli: In

public class JucatoriLiberiArrayAdapter extends BaseAdapter { 

    private Context context; 
    private ArrayList<FreePlayers> players; 




    public JucatoriLiberiArrayAdapter(Context context, ArrayList<FreePlayers> playersList) { 
     super(); 

     this.context = context; 
     this.players = playersList; 
    } 

    @Override 
    public int getCount() { 
     return 0; 
    } 

    @Override 
    public Object getItem(final int position) { 
     return null; 
    } 

    @Override 
    public long getItemId(final int position) { 
     return 0; 
    } 

    @Override 
    public View getView(final int position, View convertView, final ViewGroup parent) { 



     LayoutInflater inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     if (convertView == null) { 

      convertView = inflater.inflate(R.layout.list_view_jucatori_liberi, null); 


      TextView playerName = (TextView) convertView.findViewById(R.id.name); 
      playerName.setText((CharSequence) players.get(position)); 


     } 


     return convertView; 

    } 


} 

cevap

0

senin onResponse() bir Call nesne puanlık almak bağdaştırıcınız bir List<FreePlayers> bekliyor, yanıt argümanı Bağdaştırıcınıza vermek istediğiniz oyuncuların listesi.

final Call<List<FreePlayers>> request = REST_CLIENT.getFreePlayers(1); 

request.enqueue(new Callback<List<FreePlayers>>() { 

    @Override 
    public void onResponse(final Call<List<FreePlayers>> call, final Response<List<FreePlayers>> response) { 

     ArrayList<FreePlayers> players = null; 

     players = response.body(); 

     ListView lv = (ListView) getView().findViewById(android.R.id.list); 

     JucatoriLiberiArrayAdapter adapter = new JucatoriLiberiArrayAdapter(getActivity(), 
         players); 

     lv.setAdapter(adapter); 


    } 

    @Override 
    public void onFailure(final Call<FreePlayers> call, final Throwable t) { 

    } 
}); 
0

çağrı oyunculara assgined, ancak oyuncuların tip ArrayList<FreePlayers> ve çağrı tipi Call<List<FreePlayers> geçerli:

bu kodu deneyin. Aynı değil. Adaptör ArrayList<FreePlayers>'u bekliyor.

0

Sen

Call<FreePlayers>, 

ilan fakat aynı zamanda

Call<ArrayList<FreePlayers>>. 

almayı beklediği çalışın, Adaptör bozuldu konum. Bu yöntemler aşağıdaki gibi olmalıdır:

@Override 
public int getCount() { 
    if (players == null) return 0; 
    return players.size(); 
} 

@Override 
public Object getItem(final int position) { 
    if (players == null || players.size() == 0) return null; 
    return players.get(position); 
} 

@Override 
public long getItemId(final int position) { 
    return getItem(position).getId(); // or something like an id that suits you. 
}