【问题标题】:Android beginner onClick crashAndroid初学者onClick崩溃
【发布时间】:2013-10-11 14:09:35
【问题描述】:

我是第一次编写 Android 程序,但遇到了一些困难。这个想法是制作一个猜谜游戏应用程序,其中用户在他/她的脑海中输入一个数字,然后应用程序尝试猜测它。用户会给应用程序提供更高和更低的提示。由于某种原因,我按下开始按钮后应用程序崩溃。因此,我知道onClick 方法中存在错误,但由于它在我按下开始按钮后立即关闭,因此我无法使用println 之类的东西进行调试。

所以实际上我有两个问题:

  1. 我的推理在哪里失败? (或者告诉我如何找出我的错误)
  2. 如何调试这样的事情?

开始、升高和降低都是程序中的按钮。

@Override
    public void onClick(View arg0) {
        int min = 0;
        int max = 100;
        Random random = new Random(100);
        int answer = 0;

        if (arg0 == start) {
            answer = random.nextInt(100);
            buttonTextView.setText(answer);
        }
        else if (arg0 == higher){
            min = answer;
            answer = random.nextInt((max - min) + min);
            buttonTextView.setText(answer);
        }
        else if (arg0 == lower) {
            max = answer;
            answer = random.nextInt((max-1) - min);
            buttonTextView.setText(answer);
        }

    }

【问题讨论】:

  • 您可以使用 Logcat 进行调试。通常崩溃会 printStackTrace() 并且您可以确切地看到它发生的位置。
  • 向我们展示 logcat 错误日志,我们可以准确判断您在哪一行出错...(主要是:))

标签: java android


【解决方案1】:
  1. 我的推理在哪里失败了?

您使用了错误的setText() 方法。 In the TextView Docs 你会看到有一个需要int,这是为了检索你在strings.xml 中拥有的String 资源,所以你可以将它传递给resource id。因此,您的setText() 正在寻找带有idresource,无论您的answer 变量是什么。您需要将其转换为 String 类似

buttonTextView.setText(String.valueof(answer));

或几种不同方式中的一种。

  1. 如何调试这样的事情?

当您的应用崩溃时,您的 logcat 中会出现异常。 This answer 可以帮助你阅读你的 logcat。要在 Eclipse 中打开您的 logcat 窗口,如果还没有,您可以这样做

窗口 --> 显示视图 --> 其他 --> Android --> LogCat

附注

您应该将params 中的onClick() 更改为有意义的内容,以便我进行更改

public void onClick(View arg0)

类似

public void onClick(View v)  // v for view, could also be view, btn
                       //  whatever makes sense to you and others who may read it

您还应该比较您点击的Viewid,而不是View 本身。因此,您可以将其与以下内容进行比较(假设您将 arg0 更改为 v

if (v.getId() == R.id.start)  // Assuming start is the id in your xml of your Button
                                 // this will also allow you to use a switch statement

onClick()minmaxanswer)中的变量应在 onClick() 之外初始化,否则每次单击时它们将重置为默认值,我很确定你不想(感谢 323go 指出)。

【讨论】:

  • 可能想给他一个提示,answer 在随后的点击中将不可用,除非他将成员置于 Activity 范围内或使其成为静态。
  • @323go 我不确定你的意思。你是什​​么意思它不会“可用”?
  • 他正在使用局部变量answer 来计算基于更高/更低按钮按下的新答案。在随后的onClick 调用中,他不会拥有之前的answer 值,并且它始终为0。
  • @323go 你不是说minmax 因为它们每次都会被重置
  • 好的,是的,我还没有进入逻辑,只是语法有什么问题。所有3个变量都应该是成员变量,而不是在onClick()中初始化
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多