2012-07-08 29 views
2

在NewTweetActivity.java,我有:添加文本監聽器造成未發現異常

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.newtweet); 
    listenToChange(); 
} 

public void listenToChange(){ 
    TextView cEditText = (TextView) findViewById(R.id.tweetCountTextView); 
    EditText tView = (EditText) findViewById(R.id.tweetComposerEditText); 
    tView.addTextChangedListener(new TextWatcher() { 

     public void afterTextChanged(Editable s) { 
      int len = (140 - s.length()); 
      cEditText.setText(len); 
     } 

     public void beforeTextChanged(CharSequence arg0, int arg1, 
       int arg2, int arg3) { 
      // TODO Auto-generated method stub 

     } 

     public void onTextChanged(CharSequence arg0, int arg1, int arg2, 
       int arg3) { 
      // TODO Auto-generated method stub 

     } 
    }); 
} 

然而,它要求我聲明cEditText作爲最終,但是當我做,它無法加載newtweet佈局。

如果我把裏面的afterTextChangedcEditText聲明,它加載的佈局,但是當我觸發afterTextChanged(由EditText上鍵入),它會導致這樣的:

07-08 20:44:27.054: E/AndroidRuntime(4417): FATAL EXCEPTION: main 
07-08 20:44:27.054: E/AndroidRuntime(4417): android.content.res.Resources$NotFoundException: String resource ID #0x8b 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at android.content.res.Resources.getText(Resources.java:201) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at android.widget.TextView.setText(TextView.java:2911) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at com.jgnzapps.quark.NewTweetActivity$1.afterTextChanged(NewTweetActivity.java:31) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at android.widget.TextView.sendAfterTextChanged(TextView.java:6532) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:6720) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at android.text.SpannableStringBuilder.sendTextHasChanged(SpannableStringBuilder.java:897) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:353) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:269) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:432) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:409) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:28) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:654) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:415) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:318) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:75) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at android.os.Looper.loop(Looper.java:130) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at android.app.ActivityThread.main(ActivityThread.java:3694) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at java.lang.reflect.Method.invoke(Method.java:507) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
07-08 20:44:27.054: E/AndroidRuntime(4417):  at dalvik.system.NativeStart.main(Native Method) 

如果我稱之爲setText方法的cEditText與一個字符串(例如「貓」),它的工作原理。

任何想法?

回答

4

這個問題很簡單:你試圖將int設置爲Text而不是String。 因此,android執行此方法:http://developer.android.com/reference/android/widget/TextView.html#setText(int) 這意味着它搜索具有給定id的String-resource,該id不存在。

你應該設置文字是這樣的:

int len = (140 - s.length()); 
cEditText.setText(String.valueOf(len)); 
+0

感謝 - 我一直在尋找一個len.toString()方法,已經從.NET去直去渣,並認爲它需要轉換! – svbnet 2012-07-08 09:25:32

+0

int是一個基元,它不提供toString()。你也可以創建一個Integer(Wrapper類)並在那裏調用toString()。 – MatF 2012-07-08 09:36:44

+0

該死的!我剛纔也犯了同樣的錯誤。 – 2015-08-19 07:00:32