2013-12-05 3 views
0

создать проект, и это MainActivity классПрименение внезапно Force остановки при нажатии кнопки со звуком

package com.example.myproject; 

import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.view.Menu; 
import android.view.View; 
import android.widget.*; 

public class MainActivity extends Activity { 

Button btnmulai, btnpengaturan, btnexit,btninfo; 
MediaPlayer player; 

protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    btnpengaturan=(Button)findViewById(R.id.btnPengaturan); 
    btnmulai=(Button)findViewById(R.id.btnMulai); 
    btnexit=(Button)findViewById(R.id.btnExit); 
    btninfo=(Button)findViewById(R.id.btnInfo); 

    btnpengaturan.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View arg0) 
     { 
      // TODO Auto-generated method stub 
      Intent intent = new Intent(MainActivity.this, Pengaturan.class); 
      playSound(1); 
      startActivity(intent); 
     } 
    }); 

    btnmulai.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View arg0) 
     { 
      // TODO Auto-generated method stub 
      Intent intent = new Intent(MainActivity.this, Prolog.class); 
      playSound(1); 
      startActivity(intent);   
     } 
    }); 

    btninfo.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View arg0) 
     { 
      // TODO Auto-generated method stub 
      playSound(1);   
      AlertDialog.Builder alertinfo = new AlertDialog.Builder(MainActivity.this); 

      alertinfo.setMessage("Info saja"); 
      alertinfo.setTitle("INFO"); 
      alertinfo.setPositiveButton("OK", null); 
      alertinfo.setCancelable(true); 
      alertinfo.create().show(); 
     } 
    }); 


    btnexit.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 

      DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() 
      { 
       @Override 
       public void onClick(DialogInterface dialog, int which) 
       { 
        switch (which) 
        { 
         case DialogInterface.BUTTON_POSITIVE: 
         // TODO Auto-generated method stub 
         finish(); 
         System.exit(0); 
         break; 

         case DialogInterface.BUTTON_NEGATIVE: 
         //No button clicked 
         break; 
        } 
       } 
      }; 

      AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
      builder.setMessage("Anda yakin ingin keluar?").setPositiveButton("Yes", dialogClickListener).setNegativeButton("No", dialogClickListener).show(); 
     } 
    }); 
} 


public void playSound(int arg) 
{ 
    try 
    { 
     if (player.isPlaying()) 
     { 
      player.stop(); 
      player.release(); 
     } 
    } 
    catch(Exception e) 
    { 

    } 

    if (arg == 1) 
    { 
     player = MediaPlayer.create(this, R.raw.atur); 
    } 
    player.setLooping(false); 
    player.start(); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 
} 

Когда я пытаюсь скомпилировать на Bluestacks или Galaxy S4, он работает, но когда я пытался скомпилировать на Скрижали, и я нажмите btnmulai или btninfo, он сказал, что «к сожалению, MyProject остановился» .. Это ошибка Logcat:

FATAL EXCEPTION: main 
java.lang.NullPointerException 
at com.example.myproject.MainActivity.playSound(MainActivity.java:135) 
at com.example.myproject.MainActivity.$3.onClick(MainActivity.java:67) 
at android.view.View.performClick(View.java:4206) 
at android.view.View$PerformClick.run(View.java:17357) 
at android.os.Handler.handleCallback(Handler.java:725) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5041) 
at java.lang.reflect.invokeNative(Native Method) 
at java.lang.reflect.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
at dalvik.system.NativeStart.main(Native Method) 

Я не знаю, почему, никакого ответа?

+0

Было бы полезно, если бы вы включили то, что вы видите в logcat, что такое фактическое или возникшая ошибка или исключение, что показали ваши усилия по отладке далеко, и т.д. – Carth

+0

yup. разместите логарифм. – Jeongbebs

+0

, который является logcat: D –

ответ

0

Попробуйте это ..

Я думаю, что вы не initilize на игрока так, что пустой указатель приходя

Вы урожденная проверить игрока равна нулю или не с этим if(player != null){ }

Elample находится ниже

public void playSound(int arg) 
{ 
    if (arg == 1) 
    { 
     player = MediaPlayer.create(this, R.raw.atur); 
    } 

    if(player != null){ 
     player.setLooping(false); 
     player.start(); 
    } 

    try 
    { 

     if(player != null){ 
      if (player.isPlaying()) 
      { 
       player.stop(); 
       player.release(); 
      } 
     } 
    } 
    catch(Exception e) 
    { 

    } 

} 

EDIT:

@Override 
protected void onPause() 
{ 
     if(player != null){ 
      if (player.isPlaying()) 
      { 
       player.stop(); 
       player.release(); 
      } 
     } 
} 
+0

это работает, но я думаю, что есть предупреждение, это ловушка: MediaPlayer завершен без выпуска .. Что это значит? –

+0

@ user3042650 проверить мое редактирование использовать 'onPause' для этого. – Hariharan

+0

где я должен добавить/использовать это onPause? –

0

Попробуйте это:

private void playSound() { 
    // TODO Auto-generated method stub 
    try{ 
     player.release(); 
    } 
    catch(Exception e) 
    {Log.i("error Media player", e.getMessage()); 
    } 
     player=MediaPlayer.create(this, R.raw.atur); 
     player.start(); 
} 
+0

Я использовал этот код, и это ловушка: FATAL EXCEPTION: main java.lang .NullPointerException: println нуждается в сообщении на android.util.Log.println_native (собственный метод) на android.util.Log.i (Log.java:159) at com.example.myproject.MainActivity.playSound (MainActivity. java: 140) и т. д. , а затем логарифм тот же с моим logcat выше .. –

0

Вы должны инициализировать player перед и на самом деле назвать player.isPlaying() метод, как:

public void playSound(int arg) 
{ 
if (arg == 1) 
    { 
     player = MediaPlayer.create(this, R.raw.atur); 
    } 
    try 
    { 
     if (player.isPlaying()) 
     { 
      player.stop(); 
      player.release(); 
     } 
    } 
    catch(Exception e) 
    { 

    } 


    player.setLooping(false); 
    player.start(); 
} 

Однако, убедитесь, что U обрабатывать случаи, когда arg не 1 , так что игрок все еще инициализируется даже в этом случае. (Это произойдет, когда playSound(2) вызывается до playSound(1) в этой реализации)

Смежные вопросы