我正在尝试几乎整天,修复这个错误...但是logcat没有为我提供足够的信息来理解我做错了什么。在我的真实设备上运行API 23,我的recyclerview运行良好。一旦我在运行API 19的模拟器上运行应用程序,我的应用程序崩溃,当它开始加载recycleview的适配器。在运行Lollipop的模拟器上,这些问题不会持续存在。这是代码。
HistoryActivity
RecyclerView recyclerView1;
RecyclerView.Adapter rvadapter1;
RecyclerView.LayoutManager rvLayoutManager1;
public static ArrayList<String> itemAdress;
public static ArrayList<String> itemAuthor;
public static ArrayList<String> itemDate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rv);
Toolbar toolbar = (Toolbar) findViewById(R.id.rv_toolbar);
setSupportActionBar(toolbar);
toolbar.setTitle(R.string.title_recyclerview);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
itemAdress = new ArrayList<>();
itemAuthor = new ArrayList<>();
itemDate = new ArrayList<>();
recyclerView1 = (RecyclerView) findViewById(R.id.recyclerView1);
rvLayoutManager1 = new LinearLayoutManager(this);
recyclerView1.setLayoutManager(rvLayoutManager1);
recyclerView1.setHasFixedSize(true);
rvadapter1 = new RVAdapter();
recyclerView1.setAdapter(rvadapter1);
}
RVAdapter
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.ViewHolderKlasse> {
public class ViewHolderKlasse extends RecyclerView.ViewHolder{
TextView itemAdress;
TextView itemAuthor;
TextView itemDate;
public ViewHolderKlasse(View itemView) {
super(itemView);
itemAdress = (TextView) itemView.findViewById(R.id.itemAdress);
itemAuthor = (TextView) itemView.findViewById(R.id.itemAuthor);
itemDate = (TextView) itemView.findViewById(R.id.itemDate);
}
}
@Override
public ViewHolderKlasse onCreateViewHolder(ViewGroup viewGroup, int i) {
View itemView1 = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item_rv, null);
return new ViewHolderKlasse(itemView1);
}
@Override
public void onBindViewHolder(final ViewHolderKlasse viewHolderKlasse, final int i) {
viewHolderKlasse.itemAdress.setText(HistoryActivity.itemAdress.get(i));
viewHolderKlasse.itemAuthor.setText(HistoryActivity.itemAuthor.get(i));
viewHolderKlasse.itemDate.setText(HistoryActivity.itemDate.get(i));
}
@Override
public int getItemCount() {
return HistoryActivity.itemAdress.size();
}
}
这就是我在logcat中看到的
FATAL EXCEPTION: main
Process: support.plus.test, PID: 3640 java.lang.VerifyError: support/plus/test/rv/RVAdapter at support.plus.test.rv.HistoryActivity.onCreate(HistoryActivity.java:82)
第82行是:
rvadapter1 = new RVAdapter();
欢迎任何帮助或想法!提前谢谢。
答案 0 :(得分:2)
因此,VerifyError检查3件事:
同样在你的情况下,你从适配器中访问Activity本身已经是设计中的错误,会产生太多的依赖。使用您需要的信息为适配器创建构造函数:
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.ViewHolderKlasse> {
ArrayList<String> mItemAdress;
ArrayList<String> mItemAuthor;
ArrayList<String> mItemDate;
public RVAdapter(ArrayList<String> itemAdress, ArrayList<String> itemAuthor, ArrayList<String> itemDate){
mItemAdess = itemAdress;
mItemAuthor = itemAuthor;
mItemDate = itemDate;
}
...
}
在适配器中使用这些数组,而不是通过空构造函数创建适配器,通过这个新的构造函数创建它。
答案 1 :(得分:-1)
我发现了问题,那就是杀了我......
当我将 此行添加到app build.gradle
时multiDexEnabled true
Android API 19(KitKat)上的应用崩溃。
我在依赖项中另外添加了这个:
compile 'com.android.support:multidex:1.0.1'
这在Manifest中
android:name="android.support.multidex.MultiDexApplication"
并使用gradle文件同步项目,我的应用程序像魅力一样运行,并且它会停止崩溃。
无论如何,谢谢你们!