안드로이드스튜디오 질문입니다

조회수 1085회

아래 코드로 작성했습니다 근데 모양바꾸기 누르면 어플이 죽습니다... 오류코드는 E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da D/HostConnection: createUnique: call D/HostConnection: HostConnection::get() New Host Connection established 0xdc7d23c0, tid 16391 D/HostConnection: HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_native_sync_v2 ANDROID_EMU_native_sync_v3 ANDROID_EMU_native_sync_v4 ANDROID_EMU_dma_v1 ANDROID_EMU_YUV420_888_to_NV21 ANDROID_EMU_YUV_Cache ANDROID_EMU_async_unmap_buffer ANDROID_EMU_sync_buffer_data GL_OES_EGL_image_external_essl3 GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_host_side_tracing ANDROID_EMU_async_frame_commands ANDROID_EMU_gles_max_version_3_1 E/eglCodecCommon: GoldfishAddressSpaceHostMemoryAllocator: ioctl_ping failed for device_type=5, ret=-1 D/EGL_emulation: eglMakeCurrent: 0xdc785420: ver 3 1 (tinfo 0xdc783370) D/eglCodecCommon: setVertexArrayObject: set vao to 0 (0) 1 2 W/ple.sampletoas: Accessing hidden method Landroid/os/Trace;->asyncTraceBegin(JLjava/lang/String;I)V (light greylist, reflection) Accessing hidden method Landroid/os/Trace;->asyncTraceEnd(JLjava/lang/String;I)V (light greylist, reflection) Accessing hidden method Landroid/os/Trace;->traceCounter(JLjava/lang/String;I)V (light greylist, reflection) D/AndroidRuntime: Shutting down VM E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.sampletoast, PID: 16360 java.lang.IllegalStateException: Could not execute method for android:onClick at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:446) at android.view.View.performClick(View.java:6597) at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119) at android.view.View.performClickInternal(View.java:6574) at android.view.View.access$3100(View.java:778) at android.view.View$PerformClick.run(View.java:25885) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) 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.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:441) at android.view.View.performClick(View.java:6597)  at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)  at android.view.View.performClickInternal(View.java:6574)  at android.view.View.access$3100(View.java:778)  at android.view.View$PerformClick.run(View.java:25885)  at android.os.Handler.handleCallback(Handler.java:873)  at android.os.Handler.dispatchMessage(Handler.java:99)  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.TextView.setText(java.lang.CharSequence)' on a null object reference at com.example.sampletoast.MainActivity.onButton2Clicked(MainActivity.java:58) at java.lang.reflect.Method.invoke(Native Method)  at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:441)  at android.view.View.performClick(View.java:6597)  at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)  at android.view.View.performClickInternal(View.java:6574)  at android.view.View.access$3100(View.java:778)  at android.view.View$PerformClick.run(View.java:25885)  at android.os.Handler.handleCallback(Handler.java:873)  at android.os.Handler.dispatchMessage(Handler.java:99)  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)  I/Process: Sending signal. PID: 16360 SIG: 9

도움주시면 감사하겠습니다 ㅠㅠ

MainActivity-- package com.example.sampletoast;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast;

import com.google.android.material.snackbar.Snackbar;

public class MainActivity extends AppCompatActivity { EditText editText; EditText editText2; Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

    editText = findViewById(R.id.editText);
    editText2=findViewById(R.id.editText2);

}

public void onButton1Clicked(View v){
    try{
        Toast toastView = Toast.makeText(this,"위치가 바뀐 토스트메시지입니다",
                Toast.LENGTH_LONG);
        int xOffset = Integer.parseInt(editText.getText().toString());
        int yOffset = Integer.parseInt(editText2.getText().toString());
        toastView.setGravity(Gravity.TOP|Gravity.TOP,xOffset,yOffset);

        toastView.show();
    }catch(NumberFormatException e){
        e.printStackTrace();
    }
}


public void onButton2Clicked(View v){
    //LayoutInflater 객체를 이용해 XML 로 정의된 레이아웃을 메모리에 객체화 함
    LayoutInflater inflater = getLayoutInflater();

    //layout 폴더의 toastborder.xml 파일의 toast_layout_root 아이디를 가져옴
    View layout = inflater.inflate(R.layout.toastborder,
            (ViewGroup) findViewById(R.id.toast_layout_root));

    //View 객체에서 아이디가 text 인 텍스트뷰 객체를 가져옴
    TextView text = layout.findViewById(R.id.text);

    Toast toast = new Toast(this);
    text.setText("모양 바꾼 토스트");
    toast.setGravity(Gravity.CENTER, 0, -100);
    toast.setDuration(Toast.LENGTH_SHORT);
    toast.setView(layout);
    toast.show();

}

public void onButton3Clicked(View v){
    Snackbar.make(v,"스낵바입니다.",Snackbar.LENGTH_LONG).show();
}

}

--toastborder <?xml version="1.0" encoding="utf-8"?>

<TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/toast"
    android:textSize="32sp"
    android:padding="20dp"/>

--toast <?xml version="1.0" encoding="utf-8"?>

<stroke
    android:color="#ffffff00"
    android:width="4dp"/>
<solid
    android:color="#ff883300"/>
<padding
    android:bottom="20dp"
    android:left="20dp"
    android:right="20dp"
    android:top="20dp"/>
<corners
    android:radius="15dp"/>

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • java.lang.NullPointerException: Attempt to invoke virtual method
     'void android.widget.TextView.setText(java.lang.CharSequence)' 
     on a null object reference at 
    com.example.sampletoast.MainActivity.onButton2Clicked(MainActivity.java:58)
    

    여기서 보면, onButton2Clicked 메소드 안의 setText 하는 객체가 널오브젝트여서 예외가 발생한 거고요. 코드를 보면,

       TextView text = layout.findViewById(R.id.text);
    
        Toast toast = new Toast(this);
        text.setText("모양 바꾼 토스트");
    

    onButton2Clicked 중에 setText는 여기뿐이니까, text 가 null 이라는 말이네요. layout.findViewById(R.id.text)의 결과가 null 이군요.

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

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

(ಠ_ಠ)
(ಠ‿ಠ)