【问题标题】:Use of AsyncTask in AndroidStudioAndroid Studio中AsyncTask的使用
【发布时间】:2018-05-15 15:05:15
【问题描述】:

我想在 Android Studio 中使用 AsyncTask 编写一个斐波那契应用程序。虽然我的应用程序没有错误,但当我运行它时,它会显示:“MyApplication 已停止!”。谁能指出我的错误? 我在这里包含了java代码。 提前致谢。

package com.example.asus.myapplication;

public class fibonacci
        extends AppCompatActivity
        implements View.OnClickListener {

    private Button SolveButton;
    private EditText Number;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fibonacci);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        Number = (EditText) findViewById(R.id.editText);
        Number.setOnClickListener(this);
        SolveButton = (Button) findViewById(R.id.button);
        SolveButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch(view.getId()) {
            case R.id.button: {
                double i =
                        Double.parseDouble(Number.getText().toString());
                new fibonacci_thread().execute(i);
                break;
            }
        }
    }


    public class fibonacci_thread
            extends AsyncTask<Double, Void,
            Double> {
        double s1 = 0;
        double s2 = 1;
        double s3 = 0;

        @Override
        protected Double doInBackground(Double... params) {

            for(double k = 3; k <= params[0]; k++) {
                s3 = s1 + s2;
                s1 = s2;
                s2 = s3;
            }

            return s2;
        }

        @Override
        public void onPostExecute(Double result) {
            EditText textView = (EditText) findViewById(R.id.editText2);
            String yourDoubleString = String.valueOf("Result: " +
                                                             result);
            textView.setText(yourDoubleString);
        }

        @Override
        protected void onPreExecute() {
        }

        @Override
        protected void onProgressUpdate(Void... values) {
        }
    }
}

这是我在使用 Genymotion 在“自定义电话 - 7.1.0 - API 25 - 768x1280”上安装应用程序期间的事件日志: 上午 12:14 Genymotion:设备 [自定义电话 - 7.1.0 - API 25 - 768x1280]:开始

12:15 AM 执行任务:[:app:assembleDebug]

12:15 AM Gradle 构建在 6 秒 61 毫秒内完成

12:15 AM Instant Run 执行了完整的构建和安装,因为 设备上的安装与磁盘上的本地构建不匹配。 (不再显示)

12:15 AM 无法为调试器绑定到本地 8623

【问题讨论】:

  • 显示 logcat 异常,这会让你的应用崩溃。
  • 请更新您的问题并添加Log
  • have one button for execution 好的。但是您的应用程序何时崩溃?
  • String.valueOf("Result: " + result); ???那看起来不太好。你也可以使用"Result: " + result;
  • 给我你的显示器或 Logcat 日志

标签: android android-asynctask


【解决方案1】:

在这种情况下,您可能会得到IllegalStateException 导致RuntimeException,因为您正在以编程方式在视图中添加工具栏,而您的活动可能具有装饰提供的操作栏。从这里开始,您可以应用两种方法:

  1. 使用默认操作栏并从您的代码中删除以下两行:

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar);

  2. 首先删除默认操作栏,然后使用您自己的工具栏代替它。详情可以看here

【讨论】:

  • 我检查了我的 styles.xml,我得到了这两行:falsetrue 所以我假设我的安装问题与工具栏无关。
【解决方案2】:

从设置中禁用 Instant Run 后,我的问题解决了!这样我就可以在我的设备上安装应用程序。感谢小伙伴们的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-10
    • 2015-07-26
    • 1970-01-01
    • 2020-10-27
    • 2022-01-16
    • 2020-03-22
    • 2016-10-30
    • 2015-12-29
    相关资源
    最近更新 更多