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)