作为初级开发者,我有一个小问题。我创建了一个应用程序,该应用程序在过去两周内已经下载了很多,并且拥有13k活跃用户。我已经在一些(三星)手机上测试了这个,当然还有模拟器。我无法生成任何错误,因为应用程序很简单,我没想到会这样做。
但今天我查看了我的Play Developer Console并找到了2个错误报告。这是我应该关注的事情,还是可以随机生成这些错误?我知道例如糟糕的自定义rom会造成崩溃,我自己也经历过这种情况。
我将发布创建此内容的类,当单击按钮时,它会播放选定的声音。单击按钮时nullPointerException中的一个崩溃,另一个是调用mp.stop()时生成的illegalStateException。对我而言,这似乎不可能产生错误,但当然我可能是错的。这是代码:
public class SoundActivity extends Activity implements OnClickListener,
OnCheckedChangeListener {
Button btn;
MediaPlayer mp;
RadioGroup slct;
RadioButton radio0, radio1, radio2, radio3, radio4;
int t = 1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.btclayout);
initialize();
btn.setOnClickListener(this);
slct.setOnCheckedChangeListener(this);
mp = MediaPlayer.create(this, R.raw.sound1);
}
public void initialize() {
btn = (Button) findViewById(R.id.button1);
slct = (RadioGroup) findViewById(R.id.radioGroup1);
radio0 = (RadioButton) findViewById(R.id.radio0);
radio1 = (RadioButton) findViewById(R.id.radio1);
radio2 = (RadioButton) findViewById(R.id.radio2);
radio3 = (RadioButton) findViewById(R.id.radio3);
radio4 = (RadioButton) findViewById(R.id.radio4);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mp.stop();
mp.reset();
switch (t) {
case 1:
mp = MediaPlayer.create(this, R.raw.sound1);
break;
case 2:
mp = MediaPlayer.create(this, R.raw.sound2);
break;
case 3:
mp = MediaPlayer.create(this, R.raw.sound3);
break;
}
mp.start();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
mp.release();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
mp = MediaPlayer.create(this, R.raw.sound1);
}
@Override
public void onCheckedChanged(RadioGroup arg0, int arg1) {
// TODO Auto-generated method stub
switch (arg1) {
case R.id.radio0:
t = 1;
break;
case R.id.radio1:
t = 2;
break;
case R.id.radio2:
t = 3;
break;
case R.id.radio3:
t = 4;
break;
case R.id.radio4:
t = 5;
break;
}
}
}
编辑: 这是Play控制台的堆栈跟踪:
java.lang.IllegalStateException at android.media.MediaPlayer._stop(Native Method)at android.media.MediaPlayer.stop(MediaPlayer.java:1033)at com.ddroid.DisMyApp.SoundActivity.onClick(SoundActivity.java:57)at android.view.View.performClick(View.java:3549)at android.view.View $ PerformClick.run(View.java:14400)at android.os.Handler.handleCallback(Handler.java:605)at android.os.Handler.dispatchMessage(Handler.java:92)at android.os.Looper.loop(Looper.java:154)at android.app.ActivityThread.main(ActivityThread.java:4944)at java.lang.reflect.Method.invokeNative(Native Method)at java.lang.reflect.Method.invoke(Method.java:511)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)at dalvik.system.NativeStart.main(原生方法)
第二个:
java.lang.NullPointerException at com.ddroid.DisMyApp.SoundActivity.onClick(SoundActivity.java:76)at android.view.View.performClick(View.java:2538)at android.view.View $ PerformClick.run(View.java:9152)at android.os.Handler.handleCallback(Handler.java:587)at android.os.Handler.dispatchMessage(Handler.java:92)at android.os.Looper.loop(Looper.java:130)at android.app.ActivityThread.main(ActivityThread.java:3687)at java.lang.reflect.Method.invokeNative(Native Method)at java.lang.reflect.Method.invoke(Method.java:507)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:867) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)at dalvik.system.NativeStart.main(原生方法)
答案 0 :(得分:0)
虽然不应该发生这些错误,但根据我的经验,用户总会找到一种方法以非预期的方式使应用程序崩溃:)在每次失败中,都发生在onClick()
,所以我会换行onClick()
内的try/catch
代码,然后只记录错误。您在开发人员控制台中看到错误这一事实意味着用户遇到了Force Close
问题,因此捕获错误肯定会更好。
在我看到的许多州相关问题中,主要是与用户同时在设备上进行旋转时执行操作。有时使用Android Monkey也可以随机模拟这些类型的错误。