2016-02-28 51 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));