我一直在使用recyclerView,但是当我运行我的应用程序时,它没有显示活动和应用程序崩溃的任何数据,并且它给出了此方法的错误
这是我的Adapter类:
public class Adaptor extends RecyclerView.Adapter<Adaptor.ViewHolder> {
private ArrayList<info> Info=new ArrayList<>();
public Adaptor(ArrayList<info> info) {
this.Info = info;
}
public void updateList(ArrayList<info> data) {
Info = data;
notifyDataSetChanged();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_view, parent, false);
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position)
{
info i= Info.get(position);
holder.name.setText(i.getName());
holder.city.setText(i.getCity());
holder.city.setText(i.getUniversity());
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView name, city, uni;
public ViewHolder(final View v) {
super(v);
name = (TextView) v.findViewById(R.id.name);
city = (TextView) v.findViewById(R.id.city);
uni = (TextView) v.findViewById(R.id.university);
}
}
public int getItemCount() {
return Info.size();
}
}
这是我的活动课程:
public class Home extends AppCompatActivity implements HomeCallBack {
public ArrayList<info> Info;
private Adaptor myadaptor;
private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
recyclerView=(RecyclerView)findViewById(R.id.recycle_view);
Info=new ArrayList<>();
myadaptor=new Adaptor(Info);
recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
LinearLayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(myadaptor);
BackgroundHome backgroundHome=new BackgroundHome(this,this);
backgroundHome.execute();
}
@Override
public void processData(JSONArray data)
{
JSONObject js;
if(data!=null)
{
Info=new ArrayList<>();
try
{
for(int i=0;i<data.length();i++)
{
js =data.getJSONObject(i);
info in=new
info(js.getString("Names"),js.getString("city"),
js.getString("university"));
Info.add( in);
}
myadaptor=new Adaptor(Info);
recyclerView.setAdapter(myadaptor);
} catch (JSONException e) {
e.printStackTrace();
}
myadaptor.updateList(Info);
}
每当我运行它时,它崩溃并且在getItemcount()方法中发生错误,它是null但我已将其初始化为Info.size();
答案 0 :(得分:0)
在trying apple
trying orange
trying banana
trying pineapple
trying pear
trying plum
Error: not found
功能中,您正在创建processData
列表,并向其添加新项目。这一切都很好。
但是,在您创建具有该Info
列表的新适配器之后,您将使用Info
列表再次设置该适配器。
Info
也许这会导致问题变为空。
答案 1 :(得分:0)
okey ..我检查了你的代码。对我来说,这个例外没有明显的原因,但无论如何我们要修复和调试一些问题。
之前请更改对象/类的名称......
/// you have class with name 'info'
private ArrayList<info> Info=new ArrayList<>();
// here you set variable with the same class name !!!
public Adaptor(ArrayList<info> info) {
this.Info = info;
}
如果问题仍然存在,请测试您的程序 然后让我们使用测试您的项目。
首先在您的适配器中将此行private ArrayList<info> Info=new ArrayList<>();
替换为private ArrayList<info> Info= null;
。然后让我们调试您的代码..
首先将这些行设置为注释BackgroundHome backgroundHome=new BackgroundHome(this,this);
backgroundHome.execute();
,然后运行您的程序..大多数情况下,您的程序将运行而不会出现错误..如果发生这种情况,那么您在processData(JSONArray data)
中的错误
然后让我们检查您的代码并进行修改。 你不需要这些行。
myadaptor=new Adaptor(Info); // delete
recyclerView.setAdapter(myadaptor);// delete
现在运行你的程序..