Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 应用程序强制关闭没有令人信服的原因_Android - Fatal编程技术网

Android 应用程序强制关闭没有令人信服的原因

Android 应用程序强制关闭没有令人信服的原因,android,Android,下面的代码运行正常,但当我单击back时,应用程序崩溃并强制关闭。 (此代码用于SD卡的播放文件,如果未下载,则显示警报) 什么 我能做什么 请帮帮我 import java.io.File; import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.content.Intent; import android.media.

下面的代码运行正常,但当我单击back时,应用程序崩溃并强制关闭。 (此代码用于SD卡的播放文件,如果未下载,则显示警报)

什么

我能做什么

请帮帮我

import java.io.File;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

 public class AudioPlayer extends Activity implements OnClickListener {
 Button playButton;
 MediaPlayer player;
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 player = MediaPlayer.create(this,Uri.fromFile(audioFile));
 playButton = (Button) this.findViewById(R.id.ButtonPlayStop);
 playButton.setOnClickListener(this);
 }Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
 File sdcard = Environment.getExternalStorageDirectory();
 File audioFile = new File(sdcard.getPath() + "/bluetooth/یه سوال دارم مگه1.mp3");


public void onClick(View v) {


 if(audioFile.exists())
{

    if(player!=null)
    {
       if(player.isPlaying())
       {
          player.pause();
       }   
       else
       {
         player.start();
       }
    }
}
 else
  {
Builder alert = new AlertDialog.Builder( AudioPlayer.this);
                alert.setTitle("Alert");
                alert.setMessage("فایل دانلود نشده است");
                alert.setPositiveButton("OK", null);
                alert.show();
}

}

@Override
public void onBackPressed() {
if( player.isPlaying() ) {
 player.stop();
}
super.onBackPressed();
}
}
还有我的日志:

 02-05 21:49:28.319: E/AndroidRuntime(5063): FATAL EXCEPTION: main
 02-05 21:49:28.319: E/AndroidRuntime(5063): java.lang.NullPointerException
 02-05 21:49:28.319: E/AndroidRuntime(5063):    at          com.example.downloadplay.AudioPlayer.onBackPressed(AudioPlayer.java:64)
 02-05 21:49:28.319: E/AndroidRuntime(5063):    at android.app.Activity.onKeyUp(Activity.java:1898)
 02-05 21:49:28.319: E/AndroidRuntime(5063):    at android.view.KeyEvent.dispatch(KeyEvent.java:1290)
 02-05 21:49:28.319: E/AndroidRuntime(5063):    at android.app.Activity.dispatchKeyEvent(Activity.java:2078)
 02-05 21:49:28.319: E/AndroidRuntime(5063):    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1722)
 02-05 21:49:28.319: E/AndroidRuntime(5063):    at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2627)
 02-05 21:49:28.319: E/AndroidRuntime(5063):    at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2602)
 02-05 21:49:28.319: E/AndroidRuntime(5063):    at android.view.ViewRoot.handleMessage(ViewRoot.java:1874)
02-05 21:49:28.319: E/AndroidRuntime(5063):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-05 21:49:28.319: E/AndroidRuntime(5063):     at android.os.Looper.loop(Looper.java:130)
02-05 21:49:28.319: E/AndroidRuntime(5063):     at     android.app.ActivityThread.main(ActivityThread.java:3687)
02-05 21:49:28.319: E/AndroidRuntime(5063):     at java.lang.reflect.Method.invokeNative(Native Method)
 02-05 21:49:28.319: E/AndroidRuntime(5063):    at java.lang.reflect.Method.invoke(Method.java:507)
02-05 21:49:28.319: E/AndroidRuntime(5063):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
02-05 21:49:28.319: E/AndroidRuntime(5063):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
 02-05 21:49:28.319: E/AndroidRuntime(5063):    at dalvik.system.NativeStart.main(Native Method)

只需检查onbackpressed()中的播放器是否为空。

当文件不存在时,播放器对象为空。当您想从本地播放文件时,需要使用构造函数创建MediaPlayer

就像这样:

public class MainActivity extends Activity {

    private MediaPlayer mPlayer;
    private File mAudioFile;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        File externalStorage = Environment.getExternalStorageDirectory();
        mAudioFile = new File(externalStorage.getPath() + "/bluetooth/یه سوال دارم مگه1.mp3");

        try {
            mPlayer = new MediaPlayer();
            mPlayer.setDataSource(mAudioFile.getAbsolutePath());
            mPlayer.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        }

        findViewById(R.id.play_stop_button).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                if (mAudioFile.exists()) {
                    if (mPlayer != null) {
                        if (mPlayer.isPlaying()) {
                            mPlayer.pause();
                        } else {
                            mPlayer.start();
                        }
                    }
                } else {
                    Builder alert = new AlertDialog.Builder(MainActivity.this);
                    alert.setTitle("Alert");
                    alert.setMessage("فایل دانلود نشده است");
                    alert.setPositiveButton("OK", null);
                    alert.show();
                }
            }
        });
    }

    @Override
    public void onBackPressed() {
        mPlayer.stop();
        mPlayer.release();
        mPlayer = null;
        super.onBackPressed();
    }
}

异常的堆栈跟踪在这里会很有帮助。一定要发布logcat,但是如果(player!=null&&player.isPlaying())我想
player
对象是
null
,您可能要检查
player
是否不是
null
。请发布logcat输出。