1

If I use the method which getFilePlayTimeString() in the CutFragment class will no get an error but will cause other bugs. Therefore, I use the method from class FileUtils but it will get an error.

CutFragment.java

    public class CutFragment extends Fragment {
    private void initViews(View view) {
        view.setOnTouchListener(new View.OnTouchListener() {
          @Override public boolean onTouch(View v, MotionEvent event) {
            return true;
          }
        });
        tvAudioPath1 = view.findViewById(R.id.tv_audio_path_1);
        btnPickAudioPath1 = view.findViewById(R.id.btn_pick_audio_1);
        btnCutAudio = view.findViewById(R.id.btn_cut_audio);
        btnPlayAudio = view.findViewById(R.id.btn_play_audio);
        tvAudioLength = view.findViewById(R.id.tv_audio_length_1);
        tvMsgInfo = view.findViewById(R.id.tv_msg_info);
        etStartTime = view.findViewById(R.id.et_start_time);
        etEndTime = view.findViewById(R.id.et_end_time);

        btnPickAudioPath1.setOnClickListener(new View.OnClickListener() {
          @Override public void onClick(View view) {
            new MaterialFilePicker()
                    .withSupportFragment(CutFragment.this)
                    .withRequestCode(1000)
                    .withFilter(Pattern.compile(".*\\.mp3$")) // Filtering files and directories by file name using regexp
                    .withHiddenFiles(true) // Show hidden files and folders
                    .start();
          }
        });

        btnCutAudio.setOnClickListener(new View.OnClickListener() {
          @Override public void onClick(View view) {
            cutAudio();
          }
        });

        btnPlayAudio.setOnClickListener(new View.OnClickListener() {
          @Override public void onClick(View view) {
            if(TextUtils.isEmpty(mCurPath)){
              Toast.makeText(getActivity(),"Cant find the File",Toast.LENGTH_SHORT).show();
              return;
            }
            playAudio(mCurPath);
          }
        });
        updateAudioTime(tvAudioPath1.getText().toString());
      }

  private void updateAudioTime(String path){
    String time = FileUtils.getFilePlayTimeString(this.getContext(), new File(path));
    tvAudioLength.setText("Audio Duration:" + time);
  }
}

FileUtils.java

public class FileUtils {
/**
   * Get duration
   */
  public static int getFilePlayTime(Context context, File file) {
    try {
      MediaPlayer mediaPlayer = MediaPlayer.create(context, Uri.parse(file.toString()));

      int duration = mediaPlayer.getDuration();

      mediaPlayer.release();

      return duration;
    } catch (Exception e) {
      e.printStackTrace();
    }
    return 0;
  }

  public static String getFilePlayTimeString(Context context, File file) {
    Date date;
    SimpleDateFormat sy1;
    String dateFormat = "error";

    int duration = getFilePlayTime(context, file);

    sy1 = new SimpleDateFormat("HH:mm:ss");//set as hour, minuter, second format
    try {

      if(duration < 60 * 60 * 1000){
        sy1 = new SimpleDateFormat("mm:ss");
        date = sy1.parse("00:00");
      }else{
        date = sy1.parse("00:00:00");
      }

      date.setTime(duration + date.getTime());
      dateFormat = sy1.format(date);

    }catch (Exception ex){
      ex.printStackTrace();
    }

    return dateFormat;
  }
}

Error

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.auroralife, PID: 26640
    java.lang.ExceptionInInitializerError
        at com.example.auroralife.util.FileUtils.getFilePlayTimeString(FileUtils.java:60)
        at com.example.auroralife.Fragment.CutFragment.updateAudioTime(CutFragment.java:179)
        at com.example.auroralife.Fragment.CutFragment.initViews(CutFragment.java:119)
        at com.example.auroralife.Fragment.CutFragment.onViewCreated(CutFragment.java:69)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1471)
        at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:802)
        at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
        at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
        at androidx.fragment.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6077)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.ContextWrapper.getCacheDir()' on a null object reference
        at com.example.auroralife.util.FileUtils.<clinit>(FileUtils.java:29)
        at com.example.auroralife.util.FileUtils.getFilePlayTimeString(FileUtils.java:60) 
        at com.example.auroralife.Fragment.CutFragment.updateAudioTime(CutFragment.java:179) 
        at com.example.auroralife.Fragment.CutFragment.initViews(CutFragment.java:119) 
        at com.example.auroralife.Fragment.CutFragment.onViewCreated(CutFragment.java:69) 
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1471) 
        at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784) 
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852) 
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:802) 
        at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625) 
        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411) 
        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366) 
        at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273) 
        at androidx.fragment.app.FragmentManagerImpl$1.run(FragmentManager.java:733) 
        at android.os.Handler.handleCallback(Handler.java:751) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6077) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
Hassam Abdelillah
  • 2,246
  • 3
  • 16
  • 37
  • 1
    Does this answer your question? [What is a NullPointerException, and how do I fix it?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – nylanderDev Jan 29 '20 at 18:32
  • You passing around a null reference in the getFilePlayTimeString() method. Try to debug it – Hassam Abdelillah Jan 29 '20 at 18:40

0 Answers0