0

コードがクラッシュしていて、助けが必要です。この部分を除いて、すべて正常に動作しています。

エラーはありませんが、timer.schedule(loadImg2, 5000);その前にクラッシュしますif (!c.moveToNext())

私の質問: ループでタイマーを正しく使用していますか? それはコードがクラッシュする場所だからです。
このログ"+-+-+-+-+-+-+-+-+- Getting out "やその後に続くものは見たことがありません。

do
{
    Log.v("log_tag", "+-+-+-+-+-+-+-+-+- Ttrying to cancel ");
    //timer.cancel();
    Log.v("log_tag", "+-+-+-+-+-+-+-+-+- Timer canceled ");

    timer = new Timer();

    Log.v("log_tag", "+-+-+-+-+-+-+-+-+- New timer created ");
    //delay  amount of time(5s here) in milliseconds before first execution.
    //period  amount of time(1s here) in milliseconds between subsequent executions.

    timer.schedule(loadImg2, 5000); //this did not produce any effect so far

    if (!c.moveToNext())
    {
        //destroy
        timer.cancel();
        myImageView.setImageBitmap(null);
        Log.v("log_tag", "+-+-+-+-+-+-+-+-+- Getting out ");
        //get out of the loop or set c.moveToFirst()
        break;
    }
} while (true);

TimerTask loadImg2 = new TimerTask()
{
    @Override
    //Load Img2
    public void run()
    {
        runOnUiThread(new Runnable()
        {
            public void run()
            {
                Log.v("log_tag", "+-+-+-+-+-+-+-+-+- Inside loadImg2 ");
                titleText.setText(DisplayTitle(c));
                Bitmap bitmap2 = BitmapFactory.decodeFile(c.getString(5));
                myImageView = (ImageView) findViewById(R.id.imageview1);
                myImageView.setImageBitmap(null);
                timer.cancel();
            }
        });
    }
}
4

1 に答える 1

1

timer.schedule() を複数回設定できないという問題があります。例外をキャッチしてみてください:

try{
  timer.schedule(loadImg2, 5000);
} catch (IllegalArgumentException e){
  Log.v(TAG, "IllegalArgumentException");
} catch (IllegalStateException e){
  Log.v(TAG, "IllegalStateException");
}

その後、アプリケーションはクラッシュしません。ただし、タイマーは初回のみ設定されます。

この問題の解決策がわかりません。私もそれを見つけようとしています。

于 2013-07-23T15:55:15.000 に答える