안드로이드 스튜디오 오류에 대해 질문합니다! Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference

조회수 4954회

저는 안드로이드 스튜디오로 간단한 노트앱을 만들고 있습니다.

그런데 에뮬레이터에 실행을 하려고 하는데 자꾸 꺼지면서 실행이 되지 않습니다. build창에서는 문제가 없어 어떻게 해결해야하는지 난관에 부딪혔습니다. 혹시 제가 올린 stack trace에서 오류를 확인할 수 있을 까요?

오류부분 stack trace 는 다음과 같습니다

2020-07-06 00:56:05.456 8998-8998/comcutenote.cuteapp E/AndroidRuntime: FATAL EXCEPTION: main
    Process: comcutenote.cuteapp, PID: 8998
    java.lang.RuntimeException: Unable to start activity ComponentInfo{comcutenote.cuteapp/comcutenote.cuteapp.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
        at comcutenote.cuteapp.MainActivity.onCreate(MainActivity.java:29)
        at android.app.Activity.performCreate(Activity.java:7136)
        at android.app.Activity.performCreate(Activity.java:7127)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6669) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 

오류부분 코드는 다음과 같습니다.

package comcutenote.cuteapp ;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

   static ArrayList<String> notes = new ArrayList<>();
   static ArrayAdapter arrayAdapter;

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

        ListView listView = (ListView) findViewById(R.id.listView);

        notes.add("Example note");

        arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, notes);

        listView.setAdapter(arrayAdapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int i, long l) {

                Intent intent = new Intent(getApplicationContext(), NoteEditorActivity.class);
                intent.putExtra("noteId", i);
                startActivity(intent);

            }
        });
    }
}

혹시 어떤 부분때문에 에뮬레이터에 실행이 안되는 것인지 알 수 있을까요?

제가 심각한 코린이라서 말씀해 주셔도 못알아들을 가능성이 커 미리 사과의 말씀을 드립니다. 그래도 최대한 열심히 해결해 보도록 하겠습니다! 감사합니다!

1 답변

  • MainActivity.java 의 29번째 줄이 listView.setAdapter(arrayAdapter); 이거라면

    Caused by: java.lang.NullPointerException: 
        Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' 
            on a null object reference
    
        at comcutenote.cuteapp.MainActivity.onCreate(MainActivity.java:29)
    

    listViewnull 일 가능성이 있어요.

    • 답변 정말 감사합니다! 혹시 null 값을 가지는 listView를 어떻게 해결할 수 있는지 알 수 있을까요? 미리 변수를 다 선언한거 같은데 해결 방법을 알수가 없네요 ㅠㅠㅠ 알 수 없는 사용자 2020.7.6 11:54
    • 잘은 모르겠지만 findViewById(R.id.listView) 여기에 문제가 있지 않을까요? layout.xml 에 문제가 있을 수도 있고요. nowp 2020.7.6 13:13
    • 네! 제가 확인해보니까 listView id를 추가를 안했더라구요.. 도와주셔서 감사합니다! 알 수 없는 사용자 2020.7.6 15:40

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)