0

私はあなたが秒単位で稼いだ金額を表示するシンプルな画面を作成しようとしているので、あなたが稼いだ金額で毎秒更新するライブフィードタイプのtextveiwを作成しようとしています。私の電話で実行すると、「無限大」と表示されるだけで、1秒の遅延を追加しようとすると、すべて一緒にフリーズしました。これが私が書いたコードです。誰かがもっと良い方法を知らなかったので、forループを使用しています。私がやろうとしていることを達成するためのより良い方法があります。私に知らせてください。

    // Calculate pay per second
    double PPS = (HW/3600);
    double OTPPS = (OTW/3600);
    double HPDPS = (HPD*3600);
    double money = 0;
    double Reserve = 0;
    loc = 0;
    // Display
    for(int i=0; i<HPDPS & loc!=7; i++)
    {
        money = (PPS+Reserve);
        Reserve = (Reserve+money);
        TextView textView = (TextView) this.findViewById(R.id.yourpay);
        textView.setText(String.valueOf(money));
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

助けてくれてありがとう!

================================================== ====================================

これは編集されたバージョンですが、画面に無限大が表示されるだけの問題がまだあります。これを修正するにはどうすればよいですか?または、タイマー方式を使用するにはどうすればよいですか?

    public void sendMessage(View view) {
    // Receive messages from options page
    Intent intent = getIntent();
    double HW = intent.getDoubleExtra(Options.MESSAGE_HW, 0);
    double OTW = intent.getDoubleExtra(Options.MESSAGE_OTW, 0);
    double HPD = intent.getDoubleExtra(Options.MESSAGE_HPD, 0);
    // Calculate pay per second
    double PPS = (HW/3600);
    double OTPPS = (OTW/3600);
    double HPDPS = (HPD*3600);
    double money = 0;
    double Reserve = 0;
    // Display
    for(int i=0; i<HPDPS; i++)
    {
        money = (PPS+Reserve);
        Reserve = (Reserve+money);
        TextView textView = (TextView) this.findViewById(R.id.yourpay);
        textView.setText(String.valueOf(money));
    }


    // set textView

}
4

2 に答える 2

2

より良い方法は、aTimerとを使用することTimerTaskです。

編集:ユーザーTimerとTimerTaskのサンプルアプリケーションコードは次のとおりです。

final TextView t1 = (TextView) findViewById(R.id.textView1);

    final Timer t =new Timer();
    t.schedule(new TimerTask() {

        @Override
        public void run() {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    t1.setText("Hello" + counter++); //Place your text data here

                    //Place your stopping condition over here. Its important to have a stopping condition or it will go in an infinite loop. 
                    if(counter == 10)
                        t.cancel(); 
                }
            }); 
        }
    }, 1000, 1000);

お役に立てれば。

于 2012-07-27T15:23:51.663 に答える
-1

[1]ここでビット単位のAND演算(ビット演算のANDing->&)を実行ています

for(int i=0; i<HPDPS & loc!=7; i++)
                     ^

[2] loc = 0を実行し、forループのlocが更新されないため、locは常に0になります

したがって、loc!=7は常にTRUEです

于 2012-07-27T15:28:58.223 に答える