1

サービス内のスレッドから進行状況ダイアログをインクリメントしたいのですが、それを行うのに本当に苦労しています。これは私のコードです。助けてください。

私はasyncTask(コンテキストに問題がありました)を含むさまざまな方法を試し、静的関数を試しましたが、正しく機能しませんでした.Androidでかなり新しいので、ここで問題を説明してください.

アクティビティ

public class MainActivity extends Activity {

ProgressDialog progressBar;

private void showProgrssBar() {

    progressBar.show();
}

private void dismissProgressBar() {

    progressBar.dismiss();
}

private void increaseProgressBar(int total) {

    progressBar.incrementProgressBy(total);
};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
     createProgressBarDialog();

Intent n = new Intent(this, myService.class);
startService(n);

}

private void createProgressBarDialog()
{
    progressBar = new ProgressDialog(this);
    progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    progressBar.setMax(200);
    progressBar.setMessage("Recieving bluetooth data");
    progressBar.setCanceledOnTouchOutside(false);
}

サービス:

 public class myService extends Service
{

    private myThread myThread;

    Handler handler = new Handler()
    {
        @Override
        public void handleMessage(android.os.Message msg) 
        {
            int total = msg.getData().getInt("total");

            if (total == -1)
            {
                dismissProgressBar();
            }
            else if (total == 0)
            {
                showProgrssBar();
            }
            else
            {
                increaseProgressBar(total);
            }       
        }   
    };

            @Override
            public int onStartCommand(Intent intent, int flags, int startId)
            {
                myThread = new myThread(handler);
                myThread.start();

                return START_STICKY;
            }

スレッド

  class myThread extends Thread
    { 
         Handler h;
    int numOfLinesToRead = 220;
    int line = 0;


    public myThread(Handler h)
    {
        this.h = h;
    }

    private void increaseProgressBarOnActivity(int i_MsgType)
    {
         Message msg = h.obtainMessage();
         Bundle b = new Bundle();
         b.putInt("total", i_MsgType);
         msg.setData(b);
         h.sendMessage(msg);
    }

    @Override
    public void run() {
        super.run();
        int increase;
        try
        {
            Thread.sleep(1);
        }
        catch (InterruptedException e)
        {

            e.printStackTrace();
        }
          for (; line < 220; line++) 
            {
               increase = (line*100/numOfLinesToRead);
                if (increase != 0)
                {
                    increaseProgressBarOnActivity(increase);   
                    try
                    {
                        Thread.sleep(90);
                    }
                    catch (InterruptedException e)
                    {

                        e.printStackTrace();
                    }

                }
            }

    }
}
4

1 に答える 1