繁体   English   中英

我收到了关于粉碎 java.lang.RuntimeException 的报告:

[英]I have got a report of crushes java.lang.RuntimeException:

我在许多设备上测试了我的应用程序,没有任何问题,但我收到了很多来自用户的暗恋报告。 各位朋友能解释一下问题出在哪里吗? 三星 A7 等一些设备也有同样的魅力,我有一个,在测试应用程序时没有给我任何问题。

谢谢

这是一份报告:

java.lang.RuntimeException: 
  at android.os.AsyncTask$AsyncFutureTask.done (AsyncTask.java:429)
  at java.util.concurrent.FutureTask.finishCompletion (FutureTask.java:383)
  at java.util.concurrent.FutureTask.setException (FutureTask.java:252)
  at java.util.concurrent.FutureTask.run (FutureTask.java:271)
  at android.os.AsyncTask$SerialExecutor$1.run (AsyncTask.java:292)
  at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
  at java.lang.Thread.run (Thread.java:929)
Caused by: java.lang.NullPointerException: 
  at android.util.Log.println_native (Native Method)
  at android.util.Log.e (Log.java:265)
  at com.waddan.quran.MediaP$Player1.doInBackground (MediaP.java:262)
  at com.waddan.quran.MediaP$Player1.doInBackground (MediaP.java:231)
  at android.os.AsyncTask$3.call (AsyncTask.java:389)
  at java.util.concurrent.FutureTask.run (FutureTask.java:266)

导致问题的活动是 MediaP,下面是它的代码:

public class MediaP extends AppCompatActivity {
private ImageView imagePlayPause;
private TextView textCurrentTime, textTotalDuration, tvTest;
private SeekBar playerSeekbar;
private Handler handler = new Handler();
public String kare, pageNum;
private Button btn_goback;
private ImageView img_showPage;
///***********************************************************
private boolean playPause;
private android.media.MediaPlayer mediaPlayer;
private ProgressDialog progressDialog;
private boolean initiaStage = true;
//************************************************************
private Integer[] images = {R.drawable.a604, R.drawable.a603, R.drawable.a602, R.drawable.a601, R.drawable.a600, R.drawable.a599, R.drawable.a598, R.drawable.a597, R.drawable.a596, R.drawable.a595, R.drawable.a594, R.drawable.a593, R.drawable.a592, R.drawable.a591, R.drawable.a590, R.drawable.a589, R.drawable.a588, R.drawable.a587, R.drawable.a586, R.drawable.a585, R.drawable.a584, R.drawable.a583, R.drawable.a582, R.drawable.a581, R.drawable.a580, R.drawable.a579, R.drawable.a578, R.drawable.a577, R.drawable.a576, R.drawable.a575, R.drawable.a574, R.drawable.a573, R.drawable.a572, R.drawable.a571, R.drawable.a570, R.drawable.a569, R.drawable.a568, R.drawable.a567, R.drawable.a566, R.drawable.a565, R.drawable.a564, R.drawable.a563, R.drawable.a562, R.drawable.a561, R.drawable.a560, R.drawable.a559, R.drawable.a558, R.drawable.a557, R.drawable.a556, R.drawable.a555, R.drawable.a554, R.drawable.a553, R.drawable.a552, R.drawable.a551, R.drawable.a550, R.drawable.a549, R.drawable.a548, R.drawable.a547, R.drawable.a546, R.drawable.a545, R.drawable.a544, R.drawable.a543, R.drawable.a542, R.drawable.a541, R.drawable.a540, R.drawable.a539, R.drawable.a538, R.drawable.a537, R.drawable.a536, R.drawable.a535, R.drawable.a534, R.drawable.a533, R.drawable.a532, R.drawable.a531, R.drawable.a530, R.drawable.a529, R.drawable.a528, R.drawable.a527, R.drawable.a526, R.drawable.a525, R.drawable.a524, R.drawable.a523, R.drawable.a522, R.drawable.a521, R.drawable.a520, R.drawable.a519, R.drawable.a518, R.drawable.a517, R.drawable.a516, R.drawable.a515, R.drawable.a514, R.drawable.a513, R.drawable.a512, R.drawable.a511, R.drawable.a510, R.drawable.a509, R.drawable.a508, R.drawable.a507, R.drawable.a506, R.drawable.a505, R.drawable.a504, R.drawable.a503, R.drawable.a502, R.drawable.a501, R.drawable.a500, R.drawable.a499, R.drawable.a498, R.drawable.a497, R.drawable.a496, R.drawable.a495, R.drawable.a494, R.drawable.a493, R.drawable.a492, R.drawable.a491, R.drawable.a490, R.drawable.a489, R.drawable.a488, R.drawable.a487, R.drawable.a486, R.drawable.a485, R.drawable.a484, R.drawable.a483, R.drawable.a482, R.drawable.a481, R.drawable.a480, R.drawable.a479, R.drawable.a478, R.drawable.a477, R.drawable.a476, R.drawable.a475, R.drawable.a474, R.drawable.a473, R.drawable.a472, R.drawable.a471, R.drawable.a470, R.drawable.a469, R.drawable.a468, R.drawable.a467, R.drawable.a466, R.drawable.a465, R.drawable.a464, R.drawable.a463, R.drawable.a462, R.drawable.a461, R.drawable.a460, R.drawable.a459, R.drawable.a458, R.drawable.a457, R.drawable.a456, R.drawable.a455, R.drawable.a454, R.drawable.a453, R.drawable.a452, R.drawable.a451, R.drawable.a450, R.drawable.a449, R.drawable.a448, R.drawable.a447, R.drawable.a446, R.drawable.a445, R.drawable.a444, R.drawable.a443, R.drawable.a442, R.drawable.a441, R.drawable.a440, R.drawable.a439, R.drawable.a438, R.drawable.a437, R.drawable.a436, R.drawable.a435, R.drawable.a434, R.drawable.a433, R.drawable.a432, R.drawable.a431, R.drawable.a430, R.drawable.a429, R.drawable.a428, R.drawable.a427, R.drawable.a426, R.drawable.a425, R.drawable.a424, R.drawable.a423, R.drawable.a422, R.drawable.a421, R.drawable.a420, R.drawable.a419, R.drawable.a418, R.drawable.a417, R.drawable.a416, R.drawable.a415, R.drawable.a414, R.drawable.a413, R.drawable.a412, R.drawable.a411, R.drawable.a410, R.drawable.a409, R.drawable.a408, R.drawable.a407, R.drawable.a406, R.drawable.a405, R.drawable.a404, R.drawable.a403, R.drawable.a402, R.drawable.a401, R.drawable.a400, R.drawable.a399, R.drawable.a398, R.drawable.a397, R.drawable.a396, R.drawable.a395, R.drawable.a394, R.drawable.a393, R.drawable.a392, R.drawable.a391, R.drawable.a390, R.drawable.a389, R.drawable.a388, R.drawable.a387, R.drawable.a386, R.drawable.a385, R.drawable.a384, R.drawable.a383, R.drawable.a382, R.drawable.a381, R.drawable.a380, R.drawable.a379, R.drawable.a378, R.drawable.a377, R.drawable.a376, R.drawable.a375, R.drawable.a374, R.drawable.a373, R.drawable.a372, R.drawable.a371, R.drawable.a370, R.drawable.a369, R.drawable.a368, R.drawable.a367, R.drawable.a366, R.drawable.a365, R.drawable.a364, R.drawable.a363, R.drawable.a362, R.drawable.a361, R.drawable.a360, R.drawable.a359, R.drawable.a358, R.drawable.a357, R.drawable.a356, R.drawable.a355, R.drawable.a354, R.drawable.a353, R.drawable.a352, R.drawable.a351, R.drawable.a350, R.drawable.a349, R.drawable.a348, R.drawable.a347, R.drawable.a346, R.drawable.a345, R.drawable.a344, R.drawable.a343, R.drawable.a342, R.drawable.a341, R.drawable.a340, R.drawable.a339, R.drawable.a338, R.drawable.a337, R.drawable.a336, R.drawable.a335, R.drawable.a334, R.drawable.a333, R.drawable.a332, R.drawable.a331, R.drawable.a330, R.drawable.a329, R.drawable.a328, R.drawable.a327, R.drawable.a326, R.drawable.a325, R.drawable.a324, R.drawable.a323, R.drawable.a322, R.drawable.a321, R.drawable.a320, R.drawable.a319, R.drawable.a318, R.drawable.a317, R.drawable.a316, R.drawable.a315, R.drawable.a314, R.drawable.a313, R.drawable.a312, R.drawable.a311, R.drawable.a310, R.drawable.a309, R.drawable.a308, R.drawable.a307, R.drawable.a306, R.drawable.a305, R.drawable.a304, R.drawable.a303, R.drawable.a302, R.drawable.a301, R.drawable.a300, R.drawable.a299, R.drawable.a298, R.drawable.a297, R.drawable.a296, R.drawable.a295, R.drawable.a294, R.drawable.a293, R.drawable.a292, R.drawable.a291, R.drawable.a290, R.drawable.a289, R.drawable.a288, R.drawable.a287, R.drawable.a286, R.drawable.a285, R.drawable.a284, R.drawable.a283, R.drawable.a282, R.drawable.a281, R.drawable.a280, R.drawable.a279, R.drawable.a278, R.drawable.a277, R.drawable.a276, R.drawable.a275, R.drawable.a274, R.drawable.a273, R.drawable.a272, R.drawable.a271, R.drawable.a270, R.drawable.a269, R.drawable.a268, R.drawable.a267, R.drawable.a266, R.drawable.a265, R.drawable.a264, R.drawable.a263, R.drawable.a262, R.drawable.a261, R.drawable.a260, R.drawable.a259, R.drawable.a258, R.drawable.a257, R.drawable.a256, R.drawable.a255, R.drawable.a254, R.drawable.a253, R.drawable.a252, R.drawable.a251, R.drawable.a250, R.drawable.a249, R.drawable.a248, R.drawable.a247, R.drawable.a246, R.drawable.a245, R.drawable.a244, R.drawable.a243, R.drawable.a242, R.drawable.a241, R.drawable.a240, R.drawable.a239, R.drawable.a238, R.drawable.a237, R.drawable.a236, R.drawable.a235, R.drawable.a234, R.drawable.a233, R.drawable.a232, R.drawable.a231, R.drawable.a230, R.drawable.a229, R.drawable.a228, R.drawable.a227, R.drawable.a226, R.drawable.a225, R.drawable.a224, R.drawable.a223, R.drawable.a222, R.drawable.a221, R.drawable.a220, R.drawable.a219, R.drawable.a218, R.drawable.a217, R.drawable.a216, R.drawable.a215, R.drawable.a214, R.drawable.a213, R.drawable.a212, R.drawable.a211, R.drawable.a210, R.drawable.a209, R.drawable.a208, R.drawable.a207, R.drawable.a206, R.drawable.a205, R.drawable.a204, R.drawable.a203, R.drawable.a202, R.drawable.a201, R.drawable.a200, R.drawable.a199, R.drawable.a198, R.drawable.a197, R.drawable.a196, R.drawable.a195, R.drawable.a194, R.drawable.a193, R.drawable.a192, R.drawable.a191, R.drawable.a190, R.drawable.a189, R.drawable.a188, R.drawable.a187, R.drawable.a186, R.drawable.a185, R.drawable.a184, R.drawable.a183, R.drawable.a182, R.drawable.a181, R.drawable.a180, R.drawable.a179, R.drawable.a178, R.drawable.a177, R.drawable.a176, R.drawable.a175, R.drawable.a174, R.drawable.a173, R.drawable.a172, R.drawable.a171, R.drawable.a170, R.drawable.a169, R.drawable.a168, R.drawable.a167, R.drawable.a166, R.drawable.a165, R.drawable.a164, R.drawable.a163, R.drawable.a162, R.drawable.a161, R.drawable.a160, R.drawable.a159, R.drawable.a158, R.drawable.a157, R.drawable.a156, R.drawable.a155, R.drawable.a154, R.drawable.a153, R.drawable.a152, R.drawable.a151, R.drawable.a150, R.drawable.a149, R.drawable.a148, R.drawable.a147, R.drawable.a146, R.drawable.a145, R.drawable.a144, R.drawable.a143, R.drawable.a142, R.drawable.a141, R.drawable.a140, R.drawable.a139, R.drawable.a138, R.drawable.a137, R.drawable.a136, R.drawable.a135, R.drawable.a134, R.drawable.a133, R.drawable.a132, R.drawable.a131, R.drawable.a130, R.drawable.a129, R.drawable.a128, R.drawable.a127, R.drawable.a126, R.drawable.a125, R.drawable.a124, R.drawable.a123, R.drawable.a122, R.drawable.a121, R.drawable.a120, R.drawable.a119, R.drawable.a118, R.drawable.a117, R.drawable.a116, R.drawable.a115, R.drawable.a114, R.drawable.a113, R.drawable.a112, R.drawable.a111, R.drawable.a110, R.drawable.a109, R.drawable.a108, R.drawable.a107, R.drawable.a106, R.drawable.a105, R.drawable.a104, R.drawable.a103, R.drawable.a102, R.drawable.a101, R.drawable.a100, R.drawable.a99, R.drawable.a98, R.drawable.a97, R.drawable.a96, R.drawable.a95, R.drawable.a94, R.drawable.a93, R.drawable.a92, R.drawable.a91, R.drawable.a90, R.drawable.a89, R.drawable.a88, R.drawable.a87, R.drawable.a86, R.drawable.a85, R.drawable.a84, R.drawable.a83, R.drawable.a82, R.drawable.a81, R.drawable.a80, R.drawable.a79, R.drawable.a78, R.drawable.a77, R.drawable.a76, R.drawable.a75, R.drawable.a74, R.drawable.a73, R.drawable.a72, R.drawable.a71, R.drawable.a70, R.drawable.a69, R.drawable.a68, R.drawable.a67, R.drawable.a66, R.drawable.a65, R.drawable.a64, R.drawable.a63, R.drawable.a62, R.drawable.a61, R.drawable.a60, R.drawable.a59, R.drawable.a58, R.drawable.a57, R.drawable.a56, R.drawable.a55, R.drawable.a54, R.drawable.a53, R.drawable.a52, R.drawable.a51, R.drawable.a50, R.drawable.a49, R.drawable.a48, R.drawable.a47, R.drawable.a46, R.drawable.a45, R.drawable.a44, R.drawable.a43, R.drawable.a42, R.drawable.a41, R.drawable.a40, R.drawable.a39, R.drawable.a38, R.drawable.a37, R.drawable.a36, R.drawable.a35, R.drawable.a34, R.drawable.a33, R.drawable.a32, R.drawable.a31, R.drawable.a30, R.drawable.a29, R.drawable.a28, R.drawable.a27, R.drawable.a26, R.drawable.a25, R.drawable.a24, R.drawable.a23, R.drawable.a22, R.drawable.a21, R.drawable.a20, R.drawable.a19, R.drawable.a18, R.drawable.a17, R.drawable.a16, R.drawable.a15, R.drawable.a14, R.drawable.a13, R.drawable.a12, R.drawable.a11, R.drawable.a10, R.drawable.a9, R.drawable.a8, R.drawable.a7, R.drawable.a6, R.drawable.a5, R.drawable.a4, R.drawable.a3, R.drawable.a2, R.drawable.a1

};


@SuppressLint({"ClickableViewAccessibility", "SourceLockedOrientationActivity"})
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_media_p);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    //  this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);

    mediaPlayer = new android.media.MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    progressDialog = new ProgressDialog(this);
    kare = getIntent().getStringExtra("EXTRA_KARE1");
    imagePlayPause = findViewById(R.id.image_playPause);
    textCurrentTime = findViewById(R.id.textCurrentTime);
    textTotalDuration = findViewById(R.id.textTotalDuration);
    img_showPage = findViewById(R.id.img_showPage);
    btn_goback = findViewById(R.id.btn_goack);
    tvTest = findViewById(R.id.tvTest);
    pageNum = getIntent().getStringExtra("EXTRA_PAGE");
    tvTest.setText("ص  "+pageNum);

    // et_go=findViewById(R.id.et_go);
    playerSeekbar = findViewById(R.id.playerSeekar);
    mediaPlayer = new MediaPlayer();
    playerSeekbar.setMax(100);
    //////show page image in the image view
    String uri = "@drawable/a" + pageNum; //imname without extension

    int imageResource = getResources().getIdentifier(uri, null, getPackageName()); //get image  resource

    Drawable res = getResources().getDrawable(imageResource); // convert into drawble

    img_showPage.setImageDrawable(res); // set as image

    //////show page image in the image view end

    imagePlayPause.setOnClickListener(new View.OnClickListener() {
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        @Override
        public void onClick(View v) {

            String url = "";
            if (kare.equals("1")) {
                url = "https://ia802309.us.archive.org/32/items/mshary-al3afasy-by-qasr-almonfasel-604-page-quran-mp3-128kb_21/";
            } else if (kare.equals("2")) {
                url = "https://ia902609.us.archive.org/32/items/64kb--yaser--aldosry---quran--mp3---604--part---full/";
            } else if (kare.equals("3")) {
                url = "https://ia801306.us.archive.org/3/items/rabiea3568356835683568865/";
            }
            String tt = pageNum;// for testing
            int mm = Integer.parseInt(pageNum);
            if (mm < 10) {
                tt = "00" + pageNum;
            } else if (mm < 100 & mm > 10) {
                tt = "0" + pageNum;
            } else tt = pageNum;
            String yy = url + tt + ".mp3";
            if (!playPause) {
                updateSeekbar();

                if (initiaStage) {
                    new Player1().execute(yy);
                    imagePlayPause.setImageResource(R.drawable.ic_pause);

                    updateSeekbar();
                } else {
                    if (!mediaPlayer.isPlaying())
                        mediaPlayer.start();
                    updateSeekbar();
                }
                playPause = true;
                imagePlayPause.setImageResource(R.drawable.ic_pause);

            } else {

                if (mediaPlayer.isPlaying()) {
                    handler.removeCallbacks(updater);//*********************
                    mediaPlayer.pause();
                    imagePlayPause.setImageResource(R.drawable.ic_play);
                    updateSeekbar();

                }
                playPause = false;

            }
        }
    });

    playerSeekbar.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent event) {
            SeekBar seekBar = (SeekBar) view;
            int playPosition = (mediaPlayer.getDuration() / 100) * seekBar.getProgress();
            mediaPlayer.seekTo(playPosition);
            textCurrentTime.setText(milliSecondsToTimer(mediaPlayer.getCurrentPosition()));
            return false;


        }
    });
    mediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
        @Override
        public void onBufferingUpdate(MediaPlayer mp, int i) {
            playerSeekbar.setSecondaryProgress(i);
            ;
            updateSeekbar();


        }
    });

    btn_goback.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (mediaPlayer.isPlaying()) {
                mediaPlayer.pause();
            }
            finish();

        }
    });


}

//**********************
class Player1 extends AsyncTask<String, Void, Boolean> {
   // @SuppressLint("WrongThread")
    @Override
    protected Boolean doInBackground(String... strings) {
        Boolean prepared = false;


        try {
            mediaPlayer.setDataSource(strings[0]);
            mediaPlayer.setOnCompletionListener(new android.media.MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(android.media.MediaPlayer mediaPlayer) {
                    playerSeekbar.setProgress(0);
                    imagePlayPause.setImageResource(R.drawable.ic_play);
                    textCurrentTime.setText(R.string.zero);
                    textTotalDuration.setText(milliSecondsToTimer(mediaPlayer.getDuration()));
                    mediaPlayer.reset();
                    initiaStage = true;
                    playPause = false;

                    mediaPlayer.stop();
                    mediaPlayer.reset();

                }
            });

            mediaPlayer.prepare();
            textTotalDuration.setText(milliSecondsToTimer(mediaPlayer.getDuration()));


            prepared = true;
        } catch (Exception e) {
            Log.e("MyAudioStreaminApp", e.getMessage());
            prepared = false;

        }

        return prepared;
    }

    @Override
    protected void onPostExecute(Boolean aBoolean) {
        super.onPostExecute(aBoolean);
        if (progressDialog.isShowing()) {
            progressDialog.cancel();
            updateSeekbar();

        }
        mediaPlayer.start();
        initiaStage = false;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        String yo=pageNum;
        progressDialog.setMessage("جاري تحميل الصفحه     "+pageNum);
        progressDialog.show();

    }


}

private Runnable updater = new Runnable() {
    @Override
    public void run() {
        updateSeekbar();

    }
};

private void updateSeekbar() {
    if (mediaPlayer.isPlaying()) {
        handler.postDelayed(updater, 1000);
        playerSeekbar.setProgress((int) (((float) mediaPlayer.getCurrentPosition() / mediaPlayer.getDuration()) * 100));

        textCurrentTime.setText(milliSecondsToTimer(mediaPlayer.getCurrentPosition()));

    }
}

private String milliSecondsToTimer(long milliSeconds) {
    String timerString = "";
    String secondsString;
    int hours = (int) (milliSeconds / (1000 * 60 * 60));
    int minutes = (int) (milliSeconds % (100 * 60 * 60)) / (1000 * 60);
    int seconds = (int) ((milliSeconds % (1000 * 60 * 60)) % (1000 * 60) / 1000);
    if (hours > 0) {
        timerString = hours + ":";

    }
    if (seconds < 10) {
        secondsString = "0" + seconds;
    } else {
        secondsString = "" + seconds;
    }
    timerString = timerString + minutes + ":" + secondsString;
    return timerString;
}

@Override
protected void onPause() {
    super.onPause();
    mediaPlayer.stop();


}

}

我们无法告诉您问题的最终原因,因为有关原因的信息已因“错误记录”而丢失。

发生的事情是您的代码在此处捕获了异常:

    } catch (Exception e) {
        Log.e("MyAudioStreaminApp", e.getMessage());
        prepared = false;
    }

由于某种原因,异常有一条null消息。 (我们不知道为什么。一个非空消息不需要异常。在这个阶段我们只能猜测异常实际上是什么,尽管它可能特定于某些设备上的媒体播放器实现。)。

因此,您实际上是在调用:

  Log.e("MyAudioStreaminApp", null);

但是Log.e方法的 javadoc 明确指出该消息必须是非空的。 因此,上述结果导致 NPE 被抛出到日志代码的深处。 (而不是记录你想记录的问题,你会得到一些无益的东西。)


解决方案(对 NPE)是将记录器调用更改为:

 Log.e("MyAudioStreaminApp", "problem playing media", e);

为什么:

  1. 这样您就不会被异常有null消息的边缘情况绊倒。
  2. 这样您就可以记录异常的类名。
  3. 这样您就可以记录嵌入在异常中的堆栈跟踪。 这至少会指出您的代码中触发异常的位置,并且它还可能为您提供进一步的见解......取决于实际的媒体播放器在内部做什么。

下一步将在三星 A7 上测试修改后的应用程序,并查看记录的内容。


评论中的建议这样做:

Log.e("MyAudioStreaminApp", (e.getMessage() != null) ? e.getMessage() : ""); 

是(IMO)错误的。 您不会在日志记录代码中获得 NPE,但您不会更清楚地找出问题的根本原因是什么。 (您只会得到无用的日志条目,其中没有任何信息。)


从中吸取的教训是,在从异常处理程序进行日志记录时,使用带有Throwable参数的Log方法重载。 这是一个好习惯(IMO)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM