마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

fragment에서 mediaplayer 앱 중단 오류 (로그캣첨부)

0 추천

fragment에 mediaplayer를 넣고 play버튼과 pause버튼을 사용해서 음악 재생을 하려고 하는데 자꾸 앱이 중단 되네요.

어디가 잘못됐는지, 어떻게 수정하면 되는지 알려주시면 정말 감사하겠습니다 ㅠㅠ

 

로그캣 첨부합니다.

 

2020-06-26 05:32:07.358 30086-30086/? E/m.example.toda: Unknown bits set in runtime_flags: 0x8000
2020-06-26 05:32:12.064 30086-30086/com.example.today E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.today, PID: 30086
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
        at com.example.today.ui.home.HomeFragment.onCreate(HomeFragment.java:51)
        at androidx.fragment.app.Fragment.performCreate(Fragment.java:2684)
        at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:280)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1175)
        at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
        at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2629)
        at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
        at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2722)
        at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
        at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
        at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2625)
        at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)
        at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
        at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
        at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:201)
        at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1425)
        at android.app.Activity.performStart(Activity.java:7825)
        at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3294)
        at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
        at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

 

 

 

아래는 제가 작성한 것 입니다.

 

안린이 1 (190 포인트) 님이 2020년 6월 26일 질문
안린이 1님이 2020년 6월 26일 수정

1개의 답변

0 추천
 
채택된 답변

 btn_play, btn_pause가 null이라 NullPointerException 가 발생했습니다.

onCreateView에서  btn_play, btn_pause 버튼을 할당하셔야 합니다.

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        
      View view = inflater.inflate("버튼 정보가 있는 레이아웃 아이디", 
                                              container, 
                                                 false);
      // view에서 버튼 구하고, 이하 코드를 넣으세요.
    return view;
 }

익명사용자 님이 2020년 6월 26일 답변
안린이 1님이 2020년 6월 27일 채택됨
알려주신대로 했는데 계속 오류가 나네요 ㅠㅠ




package com.example.today.ui.home;

import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;

import com.example.today.R;

public class HomeFragment extends Fragment {

    private HomeViewModel homeViewModel;

    @Override
    public View onCreateView(LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        
        homeViewModel =
                ViewModelProviders.of(this).get(HomeViewModel.class);
        View root = inflater.inflate(R.layout.fragment_home, container, false);
        final TextView textView = root.findViewById(R.id.text_home);
        homeViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
            @Override
            public void onChanged(@Nullable String s) {
                textView.setText(s);
            }
        });

        View view = inflater.inflate(R.layout.fragment_home,container,false);

        final Button btn_play = (Button) getActivity().findViewById( R.id.btn_play );
        final Button btn_pause = (Button) getActivity().findViewById( R.id.btn_pause );

        final MediaPlayer mediaPlayer;
        mediaPlayer = MediaPlayer.create( getActivity(), R.raw.painkiller);

        btn_play.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mediaPlayer.start();
            }
        });

        btn_pause.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mediaPlayer.pause();
            }
        });

        return view;
    }
}



이렇게 했습니다.
아 해결하였습니다! 감사합니다 ㅎㅎ
...