应用程序已停止 - Android中的ProgressBar

时间:2017-09-12 15:21:05

标签: java android

朋友。我开始学习使用Android Studio和Java开发Android应用程序。现在我想尝试制作一个进度条。当应用程序启动时,我们有两个EditText字段,默认情况下第一个是100(进度条的最大值)和一个EditText字段,用于进度条的增量(这是步骤)。当我们点击开始时,它必须通过对话框显示。

我编写代码,没有更多错误,但是当我按下“开始”按钮时应用程序正在关闭。进度条无法正常工作

这是代码: activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView
        android:id="@+id/txt_max"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Max Value" />
    <EditText
        android:id="@+id/maximum"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="100.0" />
    <TextView
        android:id="@+id/txt_increment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Increment by"/>
    <EditText
        android:id="@+id/increment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="5.0" />
    <Button
        android:id="@+id/butt_Start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Start" />
</LinearLayout>

这是MainActivity.java:

public class MainActivity extends AppCompatActivity {
    int increment;
    ProgressDialog dialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button startButton = (Button) findViewById(R.id.butt_Start);
        startButton.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View view)
            {
                EditText et = (EditText) findViewById(increment);
                increment = Integer.parseInt(et.getText().toString());
                dialog = new ProgressDialog(MainActivity.this);
                dialog.setCancelable(true);
                dialog.setMessage("Loading...");
                dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                dialog.setProgress(0);
                EditText max = (EditText) findViewById(R.id.maximum);
                int maximum = Integer.parseInt(max.getText().toString());
                dialog.setMax(maximum);
                dialog.show();
                Thread background = new Thread(new Runnable()
                {
                    public void run()
                    {
                        try
                        {
                            while (dialog.getProgress() <= dialog.getMax())
                            {
                                Thread.sleep(500);
                                progressHandler.sendMessage(progressHandler.obtainMessage());
                            }
                        } catch (java.lang.InterruptedException e)
                        {

                        }
                    }
                });
                background.start();
            }

                Handler progressHandler = new Handler() {
                    public void handleMessage(Message msg) {
                        dialog.incrementProgressBy(increment);
                    }
                };

        });
        }
 }

2 个答案:

答案 0 :(得分:0)

该代码存在一些错误。我将通过报告您的代码段来评论每个代码:

public class MainActivity extends AppCompatActivity {
    int increment;
    ProgressDialog dialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button startButton = (Button) findViewById(R.id.butt_Start);
        startButton.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View view)
            {
                EditText et = (EditText) findViewById(increment);

以下是第一个错误:并非真正的错误,但最好是在EditTextonCreate之外)onClick进行反映,因为这样做每次点击EditText时,您都会重新创建button

错误是两倍:您使用的是findViewById(increment),其中,代码中,increment是int变量,其值实际为0。你必须使用(正如你对按钮所做的那样)

findViewById(R.id.increment);

继续:

                increment = Integer.parseInt(et.getText().toString());
                dialog = new ProgressDialog(MainActivity.this);
                dialog.setCancelable(true);
                dialog.setMessage("Loading...");
                dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                dialog.setProgress(0);
                EditText max = (EditText) findViewById(R.id.maximum);
                int maximum = Integer.parseInt(max.getText().toString());

此错误为xml方:由于您假设max.getText().toString()Integer,因此inputType添加xml number }值。

                dialog.setMax(maximum);
                dialog.show();
                Thread background = new Thread(new Runnable()
                {
                    public void run()
                    {
                        try
                        {
                            while (dialog.getProgress() <= dialog.getMax())
                            {
                                Thread.sleep(500);
                                progressHandler.sendMessage(progressHandler.obtainMessage());
                            }
                        } catch (java.lang.InterruptedException e)
                        {

                        }
                    }
                });
                background.start();
            }

                Handler progressHandler = new Handler() {
                    public void handleMessage(Message msg) {
                        dialog.incrementProgressBy(increment);
                    }
                };

        });
        }
 }

另一件事是,最好避免命名一个与id同名的变量,特别是因为id应该代表你所指向的控件(例如调用它&#34; EditTextMaxValueMainActivity&#34 ;,这是一个限制性示例,但它具有代表性。)

如果我可以推荐你,那么 TheNewBoston 频道/网站是最好的教程,它有几个带有Android基础知识的播放列表,它很简单而且非常明确。祝你好运!

对于其他错误,我们需要logtrace

答案 1 :(得分:-1)

我的答案就在这里:

这一行:

EditText et = (EditText) findViewById(increment);

必须更改为:

EditText et = (EditText) findViewById**(R.id.increment)**;

然后我去设计 activity_main.xml 的视图,并将增量 EditText和最大 EditText的inputType更改为数字。

并从数字中删除了小数格式。

  <EditText
        android:id="@+id/increment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="5" />

这里我有十进制的数字,现在我删除了它们。

<EditText
        android:id="@+id/maximum"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="100" />