Android应用程序在显示ProgressBar时遇到问题

时间:2018-07-30 21:53:39

标签: java android android-layout android-studio

这是活动中进度栏的部分:

<ProgressBar
    android:id="@+id/progressBarLogin"
    android:indeterminate="true"
    android:layout_centerInParent="true"
    style="?android:attr/progressBarStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    app:layout_constraintBottom_toTopOf="@+id/editText_password"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

这是OnCreate的代码:

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    myProgressBar = findViewById(R.id.progressBarLogin);
    myProgressBar.setVisibility(View.GONE); 
    // progress bar is hidden (yay!)
    // other stuff goes here
 }

这是按钮回调的代码:

    final Button loginButton = findViewById(R.id.buttonLogin);
    loginButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // login button was clicked
            try {
                // myCommandSender is a thread:
                myCommandSender.start()        
                waitForCommandSender();
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }

以下是此线程中等待myCommandSender完成的代码:

    private void waitForCommandSender() {
    myProgressBar.setVisibility(View.VISIBLE);
    while (myCommandSender.isAlive()) {
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        myProgressBar.setVisibility(View.GONE);
    }
}

2 个答案:

答案 0 :(得分:0)

我的建议是,首先,您需要调用waitForCommandSender();。方法,然后您需要启动线程

 final Button loginButton = findViewById(R.id.buttonLogin);
  loginButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        // login button was clicked
        try {
            // myCommandSender is a thread:
            //call the method first and start thread next
             waitForCommandSender();
            myCommandSender.start()      

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

答案 1 :(得分:0)

活动的onCreate()中缺少

setContentView(R.layout .______)。因此,您将永远无法使用UI。请在活动中添加并检查

相关问题