1

作为初级开发人员,我有一个小问题。我创建了一个应用程序,该应用程序在过去 2 周内下载了很多,并且拥有 13k 活跃用户。我已经在几部(三星)手机上进行了测试,当然也在模拟器中进行了测试。我不能产生任何错误,因为应用程序很简单,我没想到它会这样做。

但是今天我查看了我的 Play 开发者控制台,发现了 2 个错误报告。这是我应该关注的事情还是可以随机生成这个错误?例如,我知道糟糕的自定义 rom 会导致崩溃,我自己也经历过。

我将发布创建它的类,单击按钮时会播放选定的声音。单击按钮时出现 nullPointerException 崩溃之一,另一个是调用 mp.stop() 时生成的非法状态异常。对我来说,这似乎不可能产生错误,但我当然可能是错的。这是代码:

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) 在 android.os.Handler.handleCallback(Handler.java:605) 在 android.os.view.View$PerformClick.run(View.java:14400) 在 android.os .Handler.dispatchMessage(Handler.java:92) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:4944) 在 java.lang.reflect.Method。在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 在 com.android.internal 的 java.lang.reflect.Method.invoke(Method.java:511) 的 invokeNative(Native Method)。 os.ZygoteInit.main(ZygoteInit.java:551) 在 dalvik.system.NativeStart.main(Native Method)

第二个:

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) 在 android.os.Handler.handleCallback(Handler.java:587) 在 android.os.Handler.dispatchMessage(Handler.java:92) 在 android.os.Looper.loop(Looper.java:130) 在android.app.ActivityThread.main(ActivityThread.java:3687) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:507) 在 com.android。 internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) at dalvik.system.NativeStart.main(Native Method)

4

1 回答 1

0

虽然这些错误不应该发生,但根据我的经验,用户总是会找到一种方法以意想不到的方式使您的应用程序崩溃:) 在这些失败中的每一个中,它都发生在 中onClick(),所以我会将onClick()代码包装在 a 中try/catch,然后简单地记录错误。您在开发人员控制台中看到错误的事实意味着用户遇到了Force Close问题,因此捕获错误肯定更好。

在我见过的许多与状态相关的问题中,主要是用户在执行操作的同时在设备上进行旋转。有时使用Android Monkey也可以随机模拟这些类型的错误。

于 2012-06-06T12:12:15.120 回答