2016-04-08 9 views
-1

サーバーからJSONを使用してListViewを作成しようとしています。私はサーバーからデータを取得していますが、ListViewに配置する方法を理解できないようです。私が得ているエラーは、onResponseにあります。Retrofit 2を使用してListViewを作成する

それは言う:「エラー:(84、54)エラー:クラスJucatoriLiberiArrayAdapterでコンストラクタJucatoriLiberiArrayAdapterが与えられたタイプに適用することはできません。 が必要:コンテキスト、ArrayListの が見つかりましたFragmentActivity、コール> 理由:実引数のコール>をすることはできませんメソッド呼び出し変換によってArrayListに変換される "

私はAlt + Enterの修正がほとんどすべて試したと思う。タイプをCall<ArrayList<FreePlayers>からArrayList<>またはちょうどCall<>に変更しようとしました。

これが私のクラスである:

@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) { 

       } 
      }); 


     } 

マイAPIインタフェース:

public interface API { 

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

} 

そして、これは私のカスタムアダプタです:

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; 

    } 


} 

答えて

0

あなたはCallオブジェクトwherasを受け取るあなたのonResponse()であなたのアダプタはList<FreePlayers>を期待しています、応答引数はあなたのアダプターに与えたいプレイヤーのリスト。

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

コールがプレイヤーにassginedされていますが、プレーヤーのタイプがArrayList<FreePlayers>で、コールタイプはCall<List<FreePlayers>です:

は、このコードを試してみてください。同じではありません。アダプターは ArrayList<FreePlayers>を予期しています。あなたは

Call<FreePlayers>, 

を宣言するだけでなく、

Call<ArrayList<FreePlayers>>. 

を受け取ることを期待している

0

、あなたはアダプタが壊れています。これらのメソッドは、次のようになります。

@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. 
} 
関連する問題