2016-04-20 89 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