对不起之前的“为什么Android会这么乱?”题。我对这里的小问题感到不知所措。我正在尝试制作一个字母。 EditText上的计数器:
final TextWatcher mTextEditorWatcher = new TextWatcher() {
EditText edit_text = (EditText) findViewById(R.id.editText1);
TextView text_view = (EditText) findViewById(R.id.textView1);
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
};
public void onTextChanged(CharSequence s, int start, int before, int count) {
//This sets a textview to the current length
text_view.setText(String.valueOf(s.length()));
};
//public void afterTextChanged1(Editable s) {
//};
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
};
};
然后它崩溃了。这就是我之前询问EditText / TextView声明的原因。我不明白这段代码有什么问题?
LogCat日志:
04-23 00:57:46.029: E/AndroidRuntime(347): Uncaught handler: thread main exiting due to uncaught exception
04-23 00:57:46.109: E/AndroidRuntime(347): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.dtype.writer/com.dtype.writer.DTypeActivity}: java.lang.NullPointerException
04-23 00:57:46.109: E/AndroidRuntime(347): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
04-23 00:57:46.109: E/AndroidRuntime(347): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
04-23 00:57:46.109: E/AndroidRuntime(347): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
04-23 00:57:46.109: E/AndroidRuntime(347): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
04-23 00:57:46.109: E/AndroidRuntime(347): at android.os.Handler.dispatchMessage(Handler.java:99)
04-23 00:57:46.109: E/AndroidRuntime(347): at android.os.Looper.loop(Looper.java:123)
04-23 00:57:46.109: E/AndroidRuntime(347): at android.app.ActivityThread.main(ActivityThread.java:4363)
04-23 00:57:46.109: E/AndroidRuntime(347): at java.lang.reflect.Method.invokeNative(Native Method)
04-23 00:57:46.109: E/AndroidRuntime(347): at java.lang.reflect.Method.invoke(Method.java:521)
04-23 00:57:46.109: E/AndroidRuntime(347): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
04-23 00:57:46.109: E/AndroidRuntime(347): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
04-23 00:57:46.109: E/AndroidRuntime(347): at dalvik.system.NativeStart.main(Native Method)
04-23 00:57:46.109: E/AndroidRuntime(347): Caused by: java.lang.NullPointerException
04-23 00:57:46.109: E/AndroidRuntime(347): at android.app.Activity.findViewById(Activity.java:1612)
04-23 00:57:46.109: E/AndroidRuntime(347): at com.dtype.writer.DTypeActivity$1.<init>(DTypeActivity.java:29)
04-23 00:57:46.109: E/AndroidRuntime(347): at com.dtype.writer.DTypeActivity.<init>(DTypeActivity.java:28)
04-23 00:57:46.109: E/AndroidRuntime(347): at java.lang.Class.newInstanceImpl(Native Method)
04-23 00:57:46.109: E/AndroidRuntime(347): at java.lang.Class.newInstance(Class.java:1479)
04-23 00:57:46.109: E/AndroidRuntime(347): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
04-23 00:57:46.109: E/AndroidRuntime(347): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409)
04-23 00:57:46.109: E/AndroidRuntime(347): ... 11 more
04-23 00:57:46.128: E/dalvikvm(347): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
此解决方案来自here,Cameron Ketcham建议使用mEditText.addTextChangedListener(mTextEditorWatcher);
将TextWatcher设置为EditText。这可能是我问题的核心吗?
2012年4月24日更新:仍然没有找到任何有效的解决方案。
答案 0 :(得分:4)
我认为那是因为你把:
mTextView =(EditText)findViewById(R.id.textView1);
必须是:
mTextView =( TextView )findViewById(R.id.textView1);
答案 1 :(得分:2)
应该以这种方式工作。
private TextWatcher mTextEditorWatcher;
private EditText mEditText;
private TextView mTextView;
public void onCreate() {
mEditText = (EditText) findViewById(R.id.editText1);
mTextView = (EditText) findViewById(R.id.textView1);
mTextEditorWatcher = new TextWatcher() {
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
};
public void onTextChanged(CharSequence s, int start, int before, int count) {
//This sets a textview to the current length
mTextView.setText(String.valueOf(s.length()));
}
//public void afterTextChanged1(Editable s) {
//}
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
};
mEditText.addTextChangedListener(mTextEditorWatcher);
}