我从我的MySQL
数据库中获得了public ArrayList<NewsData> parseJSON(String result) {
ArrayList<NewsData> newsData = new ArrayList<NewsData>();
try {
JSONArray jArray = new JSONArray(result);
for (int i = 0; i < jArray.length(); i++) {
JSONObject json_data = jArray.getJSONObject(i);
NewsData nd = new NewsData();
nd.setTitle(json_data.getString("title"));
Toast.makeText(getActivity(), nd.getTitle(), Toast.LENGTH_SHORT).show();
newsData.add(nd);
}
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data " + e.toString());
}
return newsData;
}
,该数据库工作正常。在我获得数据后,我试图在Setter中设置数据并填写一个获取我的RecyclerAdapter中的数据以将其作为列表输出但它不起作用。
唯一有效的方法是从我的数据库获取数据并设置setter之后它不会工作不知道为什么。
public class HomeRecyclerAdapter extends RecyclerView.Adapter<HomeRecyclerAdapter.ViewHolder> {
private Context context;
class ViewHolder extends RecyclerView.ViewHolder {
public TextView itemTitle;
public TextView holeText;
public ViewHolder(final View itemView) {
super(itemView);
itemTitle = (TextView) itemView.findViewById(R.id.title_cView);
holeText = (TextView) itemView.findViewById(R.id.text);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
context = itemView.getContext();
}
});
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.layout_cardviewhome, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
}
@Override
public int getItemCount() {
return 2;
}
}
在这里,我将获取数据库的数据,并通过将数据设置为Toast来测试它是否有效,并且工作正常。
MySQL
这是我的适配器我已经尝试了一些东西,但他们不会工作,也许你们中的一个人可以帮助我。所以我想将RecyclerView
的数据添加到parseJSON
。 (我收到的数据&#34; {{1}}&#34;)
我的适配器几乎是空的,因为我删除了所有错误但不工作的那一刻
我希望你能理解我的英语,这不是很好。但总的来说,感谢您试图提供帮助: - )
答案 0 :(得分:0)
我猜你应该将newsData作为参数传递给适配器构造函数。在onBindViewHolder中,您可以通过从项目中获取来设置TextViews信息。例如:
public class HomeRecyclerAdapter extends RecyclerView.Adapter<HomeRecyclerAdapter.ViewHolder> {
private Context context;
private ArrayList<NewsData> newsData;
public HomeRecyclerAdapter (ArrayList<NewsData> newsData, Context context) {
this.newsData = newsData;
this.context = context;
}
class ViewHolder extends RecyclerView.ViewHolder {
public TextView itemTitle;
public TextView holeText;
public ViewHolder(final View itemView) {
super(itemView);
itemTitle = (TextView) itemView.findViewById(R.id.title_cView);
holeText = (TextView) itemView.findViewById(R.id.text);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
context = itemView.getContext();
}
});
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.layout_cardviewhome, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
NewsData thisNewsData = newsData.get(position);
holder.itemTitle.setText(thisNewsData.getItemTitle());
holder.holeText.setText(thisNewsData.getHoleText());
}
@Override
public int getItemCount() {
return newsDataArray.size();
}
}
如果有什么东西关闭,请相应调整并告诉我这是否有帮助。
答案 1 :(得分:0)
将初始列表传递给适配器:
private ArrayList<NewsData> newsData;
public HomeRecyclerAdapter (ArrayList<NewsData> newsData) {
this.newsData = newsData;
}
从AsyncTask
doInBackground()
中的数据库中获取新数据。在那里,您可以解析数据并创建对象。在onPostExceute()
中,您可以修改适配器的数据。例如,您将其添加到适配器并在onPostExceute()
中调用它:
public void add(NewsData data) {
this.newsData.add(data);
notifyDataSetChanged();
}