setOnClickListener() 안에 들어가는 객체가 null인데 수정을 어떻게 해야할지 모르겠습니다 ㅠ

조회수 1851회

안드로이드 생초보인데 투표앱 공부중인데 어떻게 해야할지 모르겠습니다...

E/AndroidRuntime: FATAL EXCEPTION: main

    Process: com.example.abc, PID: 15185

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.abc/com.example.abc.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)

        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)

        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)

        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)

        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)

        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)

        at android.os.Handler.dispatchMessage(Handler.java:106)

        at android.os.Looper.loop(Looper.java:223)

        at android.app.ActivityThread.main(ActivityThread.java:7656)

        at java.lang.reflect.Method.invoke(Native Method)

        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)

        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

        at com.example.abc.MainActivity.onCreate(MainActivity.java:30)

        at android.app.Activity.performCreate(Activity.java:8000)

        at android.app.Activity.performCreate(Activity.java:7984)

        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)

        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)

        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 

        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 

        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 

        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 

        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 

        at android.os.Handler.dispatchMessage(Handler.java:106) 

        at android.os.Looper.loop(Looper.java:223) 

        at android.app.ActivityThread.main(ActivityThread.java:7656) 

        at java.lang.reflect.Method.invoke(Native Method) 

        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 

        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
오류내용입니다.
package com.example.abc;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    Button btn;
    int vCount[] =new int[6];
    ImageView[] imgV = new ImageView[6];
    int[] imgID = {R.id.img1, R.id.img2, R.id.img3, R.id.img4, R.id.img5, R.id.img6};
    String Name[] = {"크리스", "브라운", "아랍","철수","은수","강민"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        android:setTitle("리더선거 투표");

        btn = (Button)findViewById(R.id.btn);

        for (int i=0; i<imgID.length; i++) {
            final int index;
            index = i;
            imgV[index] = (ImageView) findViewById(imgID[index]);
            **imgV[index].setOnClickListener(new View.OnClickListener() {**
                @Override
                public void onClick(View view) {
                    vCount[index]++;
                    Toast.makeText(getApplicationContext(), Name[index] + "에게 투표하였습니다.",
                            Toast.LENGTH_SHORT).show();
                }
            });
        }
        btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getApplicationContext(), resultvote.class);
                intent.putExtra("vCount", vCount);
                intent.putExtra("Name", Name);
                startActivity(intent);
            }
        });
    }

1 답변

  • 에러메시지는 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 이고

    imgV[index].setOnClickListener( 에서 발생했으므로, imgV[index] 가 어디에선가 null 이 된 겁니다. findViewById 로 얻어오는 거니까, 아마도 리소스명이 뭔가 잘못된 것이 있는 것 같습니다.

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

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

(ಠ_ಠ)
(ಠ‿ಠ)