2016-02-28 54 views
1

我想使具有增加每次在onStart功能的计数器的应用程式implimented的setText崩溃的应用程序

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(计数);”崩溃的应用程序 真的很感激,如果有人帮助我。

+0

后你logcat的。 –

回答

4

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

试试这个:

所有的
DisplayText.setText(Integer.toString(count)); 
+0

只接受字符串?你在阅读文档吗?它接受'R.string'资源,它们是ints ... http://developer.android.com/reference/android/widget/TextView.html#setText(int)。 –

+0

@ cricket_007当然,它接受R.string资源,但那些是对charsequences的引用。对于他想做的事情,我认为足以说它接受了他的用例的字符串。但你说得对,谢谢澄清。 – Zino

3

首先,我建议你不要开始大写字母变量名:displayText代替DisplayText

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

count++; 
DisplayText.setText(count); 

++整点是使代码更短。只需使用DisplayText.setText(++count)即可。

第三个:onCreate只有在您的活动首次创建时才会调用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); 
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) 

您现在使用的第一个,因为不止一个超负荷的传递一个字符串id和th是否会触发异常,因为找不到字符串资源ID。

你需要这个

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