안드로이드 스튜디오 'on a null object reference' 발생했습니다.
조회수 677회
안드로이드 스튜디오 어플 제작하는데 문제가 생겼습니다. 이게 on a null object reference 문제가 생겼는데 빨간 부분이 생기지 않아서 도대체 어떻게 해결해야되는지를 모르겠습니다. 로그캣 뒤져보니까 VoiceRecord_Text_List.java:43 이부분이 문제인것 같은데 제가 아직 초보자라 혹시 잘못 집은것은 아닌지 여쭙고 싶습니다. 2022-05-08 21:55:05.898 19442-19442/org.techtown.voiceletter E/AndroidRuntime: FATAL EXCEPTION: main
Process: org.techtown.voiceletter, PID: 19442
java.lang.RuntimeException: Unable to start activity ComponentInfo{org.techtown.voiceletter/org.techtown.voiceletter.VoiceRecord_Text_List}: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.recyclerview.widget.RecyclerView.setAdapter(androidx.recyclerview.widget.RecyclerView$Adapter)' 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 androidx.recyclerview.widget.RecyclerView.setAdapter(androidx.recyclerview.widget.RecyclerView$Adapter)' on a null object reference
at org.techtown.voiceletter.VoiceRecord_Text_List.onCreate(VoiceRecord_Text_List.java:43)
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)
그래서 코드를 길게 올리면 안되지만 우선 제가 의심되는 부분도 같이 올려보겠습니다.
/* initiate adapter */
mRecyclerAdapter = new MyRecyclerAdapter();
/* initiate recyclerview */
mRecyclerView.setAdapter(mRecyclerAdapter);
거기서 맨 밑의 mRecyclerView.setAdapter(mRecyclerAdapter); 이 부분이 43번째 줄에 해당합니다. 그런데 위에 new MyRecyclerAdapter()하는 부분이 문제인 것으로 생각합니다. 그래서 MyRecyclerAdapter()도 올려보겠습니다.
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.ViewHolder> {
private ArrayList<record_voice_text> mRecordVoiceText;
@NonNull
@Override
public MyRecyclerAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycleview, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyRecyclerAdapter.ViewHolder holder, int position) {
holder.onBind(mRecordVoiceText.get(position));
}
public void setTextList(ArrayList<record_voice_text> list){
this.mRecordVoiceText = list;
notifyDataSetChanged();
}
@Override
public int getItemCount() {
return mRecordVoiceText.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
ImageView check;
TextView order;
TextView message;
public ViewHolder(@NonNull View itemView) {
super(itemView);
check = (ImageView) itemView.findViewById(R.id.check);
order = (TextView) itemView.findViewById(R.id.order);
message = (TextView) itemView.findViewById(R.id.message);
}
void onBind(record_voice_text item){
check.setImageResource(item.getResourceId());
order.setText(item.getOrder());
message.setText(item.getMessage());
}
}
}
제가 아직 초보자인데다가 질문도 처음이라 이상하게 한 점 죄송합니다.
댓글 입력