2015-01-23 3 views
2

여기 새로 왔습니다. 튜토리얼을 따라 RecyclerView를 사용하여 카드 목록을 만들었습니다. 이 앱은 출시에 충돌 및 로그는 말한다 : 코드의리무버가있는 android Studio에서 NullPointerException을 받으십시오.

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wc.gap.worldcupfixture/com.wc.gap.worldcupfixture.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setHasFixedSize(boolean)' on a null object reference 

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setHasFixedSize(boolean)' on a null object reference 
at com.wc.gap.worldcupfixture.MainActivity.onCreate(MainActivity.java:78) 

조각 :

//Variables 
private static RecyclerView.LayoutManager mLayoutManager; 
private static RecyclerView mRecyclerView; 
private static RecyclerView.Adapter mAdapter; 
private static ArrayList <Integer> removedItems; 
private static ArrayList <MatchData> matches; 
static View.OnClickListener myOnClickListener; 
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); 

//error here: 
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); 

//Line 78: 
mRecyclerView.setHasFixedSize(true); 

mLayoutManager = new LinearLayoutManager(this); 
mRecyclerView.setLayoutManager(mLayoutManager); 
mRecyclerView.setItemAnimator(new DefaultItemAnimator()); 

내가 THIS tutorial에서 코드를 들었다. 2 개의 배열 인 'matches'는 크리켓 경기에 대한 정보를 포함하며 카드로 표시됩니다. 그것들이 해제 될 때, 그들은 두번째 배열 'removedItems'를 채 웁니다. 두 번째 배열은 제거 된 일치 정보를 첫 번째 배열에 다시 추가하는 데 사용됩니다.

줄을 제거하면 80 줄에서 81 줄까지 동일한 오류가 표시됩니다. 오류는 지속되지만 줄 81을 삭제하면 특정 줄 번호가 오류 로그에 표시되지 않았습니다. 도움이되는 경우 : 배열 일치가 채워집니다 튜토리얼 코드를 약간 조정했지만 문제를 정확하게 지적 할 수 없습니다. 어떻게 부울을 null로 만들 수 있습니까? 아니면 오류가 의미하는 것은 무엇입니까?

미리 감사드립니다. 필요한 경우 전체 코드를 게시 할 수 있습니다.

편집 : 더 스크립트

private static RecyclerView.LayoutManager mLayoutManager; 
    private static RecyclerView mRecyclerView; 
    private static RecyclerView.Adapter mAdapter; 
    private static ArrayList<Integer> removedItems; 
    private static ArrayList<MatchData> matches; 
    static View.OnClickListener myOnClickListener; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     myOnClickListener = new MyOnClickListener(this); 
     mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); 
     mRecyclerView.setHasFixedSize(true); 
     mLayoutManager = new LinearLayoutManager(this); 
     mRecyclerView.setLayoutManager(mLayoutManager); 
     mRecyclerView.setItemAnimator(new DefaultItemAnimator()); 

     matches = new ArrayList<>(); 
     for (int i = 0; i < MyData.matchArray.length; i++){ 
      matches.add(new MatchData(
        MyData.matchArray[i], 
        MyData.timingArray[i], 
        MyData.venueArray[i], 
        MyData.id_[i] 
      )); 
     } 

     removedItems = new ArrayList<>(); 

     mAdapter = new MyAdapter(matches); 
     mRecyclerView.setAdapter(mAdapter); 

     //other things after 
    } 

Activity_main.

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    tools:context=".MainActivity"> 


    <FrameLayout android:id="@+id/container" android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 


    <fragment android:id="@+id/navigation_drawer" 
     android:layout_width="@dimen/navigation_drawer_width" android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:name="com.wc.gap.worldcupfixture.NavigationDrawerFragment" 
     tools:layout="@layout/fragment_navigation_drawer" /> 

</android.support.v4.widget.DrawerLayout> 
+0

'activity_main.xml'을 (를) Java 코드가 아닌 게시하십시오. – Simas

+0

업데이트 된 답변보기 – Simas

답변

13
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); 

findViewById 반환 아직 setContentView 호출되지 않았기 때문에 여기 null. 이 모든 작업은 onCreate에서 완료해야합니다.

편집 : 레이아웃에 ID를 my_recycler_view 아무 RecylerView을 없다

.

귀하의 튜토리얼

그것을 추가 할 말 :

enter image description here

당신이 그것을보고 싶었어 방법을 모르겠어요.

+0

'protected void onCreate (번들 savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); myOnClickListener = 새로운 MyOnClickListener (this); mRecyclerView = (RecyclerView) findViewById (R.id.my_recycler_view); mRecyclerView.setHasFixedSize (true); mLayoutManager = 새로운 LinearLayoutManager (this); mRecyclerView.setLayoutManager (mLayoutManager); mRecyclerView.setItemAnimator (new DefaultItemAnimator()); ' –

+0

역겨운 형식으로 미안합니다. 나는 그것을 더 잘 표현할 수 없었다. btw, 그것이 내가 가진 것이다. 임씨는 아주 새롭다. 내가 무엇을 편집해야하는지에 관해 더 구체적으로 말 해주길 바란다. –

+0

@ShohomShahd는'activity_main.xml'을 게시한다. 덧글 대신 질문을 업데이트하십시오. – Simas

관련 문제