2017-04-19 104 views
-1

我正在做一個TODO應用程序,但是應用程序在活動開始時崩潰,它說列表視圖中的值爲null,我不明白爲什麼? 它不能設置適配器列表視圖ListView-App崩潰中的空對象

MainActivity:

public class MainActivity extends AppCompatActivity { 
    ListView listView; 
    FloatingActionButton fabButton; 
    ArrayAdapter<String> arrayAdapter; 
    ArrayList<String> arrayList; 
    String notesReceived; 

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

     fabButton = (FloatingActionButton) findViewById(R.id.fabButton); 
     listView = (ListView) findViewById(R.id.listView); 
     arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList); 
     arrayList = new ArrayList<>(); 
     listView.setAdapter(arrayAdapter); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode == Strings.INTENT_REQUEST_CODE) { 
      notesReceived = data.getStringExtra("notes"); 
      arrayList.add(notesReceived); 
      arrayAdapter.notifyDataSetChanged(); 
     } 

    } 

    public void openAddNotes(View view) { 

     Intent intent = new Intent(this, AddNotesActivity.class); 
     startActivityForResult(intent,Strings.INTENT_REQUEST_CODE); 

    } 
} 

AddNotesActivity:

public class AddNotesActivity extends AppCompatActivity { 

    public Button addNOtes; 
    EditText editNotes; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout_add_notes); 
     editNotes = (EditText) findViewById(R.id.editNotes); 
     addNOtes = (Button) findViewById(R.id.addNotes); 


     addNOtes.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       String notes = editNotes.getText().toString(); 
       if (notes.equals("")) { 

       } else { 
        Intent intent = new Intent(); 
        intent.putExtra(Strings.INTENT_NOTES_STRING, notes); 
        setResult(Strings.INTENT_RESULT_CODE, intent); 
        finish(); 

       } 
      } 
     }); 
    } 


} 
+0

哪條線你所得到的NPE? –

+1

arrayList = new ArrayList <>();你在首先使用arrayList對象的arrayAdapter對象之後創建對象。所以它變爲空。 –

+0

[ArrayList空指針異常]的可能重複(http://stackoverflow.com/questions/21349733/arraylist-null-pointer-exception) – DroidDev

回答

2
arrayList = new ArrayList<>(); 
arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList); 

第一個arraylist在通話後聲明。

3

拋出NullPointerException當應用程序試圖使用具有一個 對象引用空值。

問題是Arraylist null

您應該在setAdapter之前聲明ArrayList方法。

arrayList = new ArrayList<>(); 
    arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList); 
    listView.setAdapter(arrayAdapter); 
2

您在arrayAdapter使用ArrayList啓動它之前,嘗試下面的代碼代碼:

listView = (ListView) findViewById(R.id.listView); 
arrayList = new ArrayList<>();   
arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList);  
listView.setAdapter(arrayAdapter); 

希望這有助於。

2
listView = (ListView) findViewById(R.id.listView); 
    arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList); 
    arrayList = new ArrayList<>(); 
    listView.setAdapter(arrayAdapter); 

將傳遞給適配器後,您已初始化arraylist。將您的數組初始化代碼移動到arrayAdapter上方。

arrayList = new ArrayList<>(); 
    listView = (ListView) findViewById(R.id.listView); 
     arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList); 

     listView.setAdapter(arrayAdapter); 
2

您gettiing NPEarrayList。在創建ArrayAdapter的實例之前,您應該初始化arrayList

相反的:

arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList); 
arrayList = new ArrayList<>(); 
listView.setAdapter(arrayAdapter); 

試試這個:

arrayList = new ArrayList<>(); 
arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList); 
listView.setAdapter(arrayAdapter); 

希望這將有助於〜