2014-02-05 19 views
2

以下代碼運行正常,但是當我點擊後面時,應用程序崩潰並強行關閉它。 (這個代碼是用於從SD卡播放文件,如果不是下載顯示提醒)app force closed沒有令人信服的原因

什麼?

我該怎麼辦?

請幫我

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(); 
} 
} 

和我的logcat:

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) 
+5

異常的堆棧跟蹤將是有益的在這裏。 –

+0

肯定會發布logcat,但你可能想檢查'player'是不是'null'也'如果(player!= null && player.isPlaying())' – codeMagic

+0

我認爲'player'對象是'null'。請發佈logcat輸出。 –

回答

0

只是檢查,如果玩家在裏面空的onbackpressed()

0

您的播放器對象爲空時,你的文件不不存在。當你想從本地播放文件時,你需要使用構造函數來創建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(); 
    } 
} 
相關問題