setText崩溃了应用程序

时间:2016-02-28 01:03:58

标签: java android

我正在尝试创建一个具有计数器的应用程序,每次启动onStart函数时都会增加

package com.example.android.lifecycle;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import com.example.android.lifecycle.util.StatusTracker;
import com.example.android.lifecycle.util.Utils;

import static com.example.android.lifecycle.R.layout.activity_a;

public class ActivityA extends Activity{

private String mActivityName;
private TextView mStatusView;
private TextView mStatusAllView;
private StatusTracker mStatusTracker = StatusTracker.getInstance();
int count = 0;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(activity_a);

    mActivityName = getString(R.string.activity_a);
    mStatusView = (TextView)findViewById(R.id.status_view_a);
    mStatusAllView = (TextView)findViewById(R.id.status_view_all_a);

    mStatusTracker.setStatus(mActivityName, getString(R.string.on_create));
    Utils.printStatus(mStatusView, mStatusAllView);

    TextView DisplayText = (TextView) findViewById(R.id.count_id);
    count ++;

    DisplayText.setText(count);
}

@Override
protected void onResume() {
    super.onResume();
    mStatusTracker.setStatus(mActivityName, getString(R.string.on_resume));
    Utils.printStatus(mStatusView, mStatusAllView);
}

最后一行" DisplayText.setText(count);" 让应用崩溃 如果有人帮助我,我真的很感激。

3 个答案:

答案 0 :(得分:4)

这是因为count是一个int,而setText只接受字符串。

试试这个:

DisplayText.setText(Integer.toString(count));

答案 1 :(得分:3)

首先,我建议您不要使用大写字母displayText而不是DisplayText启动变量名称。

第二件事是,你不需要这样做:

count++;
DisplayText.setText(count);

++的重点是缩短代码。只需使用DisplayText.setText(++count)

第三:只有在首次创建活动时才会调用onCreate方法。当您的活动被销毁时,您的count变量将消失。因此,您的计数器将始终显示1

最后关于你的问题,我已经有点迟了,因为@Zino已经回答了。当您向TextView.setText()方法发送一个整数时,它认为它是一个字符串资源ID并尝试在资源之间找到它,如下所述:http://developer.android.com/reference/android/widget/TextView.html#setText(int)

在将整数值发送到setText方法之前,需要将整数值转换为字符串。您可以选择以下选项:

DisplayText.setText(Integer.toString(++count));

DisplayText.setText(String.valueOf(++count));

DisplayText.setText("" + ++count);

答案 2 :(得分:0)

setText有多个重载

// This takes a string id (R.string.hello).
// displayText.setText(R.string.hello);
setText (int resid)

// This takes a string in code.
// displayText.setText("Hello");
setText (CharSequence text)

您现在正在使用第一个,因为您传递了一个String ID,这将触发一个Exception,因为找不到字符串资源ID。

你需要这个

displayText.setText(String.valueOf(count));