2016-04-20 88 views
0

我正在尝试几乎整天,以解决这个错误...但logcat不提供足够的信息,让我明白我做错了什么。在我的真实设备上运行API 23,我的recyclerview运行良好。只要我在运行API 19的模拟器上运行应用程序,我的应用程序就会崩溃,当它开始加载recycleview的适配器时。在运行棒棒糖的模拟器上,这些问题不会持续。这是代码。应用程序在API 19上的RecyclerView(适配器)上崩溃

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

你可以发布你的适配器代码吗?你从Recyclerview.Adapter扩展到哪里? –

+0

您正在使用哪个版本的compat库? – MeetTitan

+0

@MeetTitan'compile'c​​om.android.support:appcompat-v7:23.3.0'' – Wladislaw

回答

0

我发现这个问题,这是我的命......

当我添加只有这条线应用中使用Android API 19(奇巧)的build.gradle

multiDexEnabled true 

应用程序崩溃。

后,我还添加了这个在依赖关系:

compile 'com.android.support:multidex:1.0.1' 

,这在清单

android:name="android.support.multidex.MultiDexApplication" 

和同步项目,gradle这个文件,我的应用程序运行就像一个魅力,并停止崩溃。

谢谢你们!

2

因此,的VerifyError检查3两件事:

  • 分行指向有效的位置。
  • 数据已初始化,引用是类型安全的。
  • 访问私有数据或私有数据和方法受到控制。

同样在你的情况下,你从适配器中访问活动,它本身已经是设计错误,创建了太多的依赖关系。您的适配器与您需要的信息创建一个构造函数:

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; 
    } 
    ... 
} 

使用这些阵列在适配器和,而不是通过空构造创建适配器,通过这个新创建它。

+0

仍然是一样的行为,API 19崩溃,API 22,23像魅力一样工作。我现在将我的HistoryActivity中的3个数组列表解析为RVAdapter,并且在那里我更改了项目的用法,并且我不再让他们抛出HistoryActivity.itemAdress。它可能是一些依赖于设计或种类?... – Wladislaw