无法通过Android中的Retrofit将数据设置为RecyclerView

时间:2016-06-25 14:54:09

标签: android json retrofit android-cardview

我通常可以在Toast消息上获取和显示数据,但我无法将它们添加到RecyclerView。我怎样才能做到这一点?请帮我。谢谢。我在下面分享我的代码。

  

NewsCatalog.java

public class NewsCatalog {
public List<MainNodes> nodes;

}

  

MainNodes.java

public class MainNodes {
public SubNodes node;

}

  

SubNodes.java

public class SubNodes {
public String body;

public String getBody() {
    return body;
}

public void setBody(String body) {
    this.body = body;
}

}

  

NewsInterface

public interface NewsService {
String BASE_URL = "http://test.muhabirce.de/app/term/";

@GET("saglik")
Call<NewsCatalog> newsCatalog();

}

  

Adapter.java

public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.ViewHolder> {

private ArrayList<SubNodes> subNodes;
private Context context;

public NewsAdapter(ArrayList<SubNodes> subNodes, Context context) {
    this.subNodes = subNodes;
    this.context = context;
}

@Override
public NewsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context)
            .inflate(R.layout.card_view_items, parent, false);

    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(NewsAdapter.ViewHolder holder, int position) {
    holder.tvText.setText(subNodes.get(position).getBody());
}

@Override
public int getItemCount() {
    return subNodes.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {

    private TextView tvText;

    public ViewHolder(View itemView) {
        super(itemView);

        tvText = (TextView) itemView.findViewById(R.id.tvText);
    }
}

}

  

MainActivity.java

private void bindDatas() {

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(NewsService.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    NewsService newsService = retrofit.create(NewsService.class);
    Call<NewsCatalog> requestCatalog = newsService.newsCatalog();


    requestCatalog.enqueue(new Callback<NewsCatalog>() {
        @Override
        public void onResponse(Call<NewsCatalog> call, Response<NewsCatalog> response) {
            SubNodes subNodess = new SubNodes();
            if (!response.isSuccessful()) {
                Log.i("TAG", "Error: " + response.code());
            } else {
                NewsCatalog catalog = response.body();
                try {
                    for (MainNodes m : catalog.nodes
                            ) {
                        subNodess.setBody(m.node.body);
                    }
                } catch (Exception e) {
                    Log.i(TAG, "" + e.getMessage());
                }
            }

            subNodes.add(subNodess);
            adapter.notifyDataSetChanged();
        }

        @Override
        public void onFailure(Call<NewsCatalog> call, Throwable t) {
            Log.e(TAG, "Error: " + t.getMessage());
        }
    });
}

}

1 个答案:

答案 0 :(得分:0)

您不应该在响应回调中创建新的Subnodes对象。适配器没有引用此对象,因此不会反映数据中的更改。更新recyclerview适配器中的子节点对象。然后只有notifyDataSetChanged()才会反映数据的变化。