Java Android:Sting返回空指针异常
我的记事本代码有问题。我制作了一个带有保存按钮的记事本,它首先显示我们在点击按钮时输入的字符串。为此,我创建了一个名为“linededitext.java”的类,但当我运行代码时,得到了一个名为“Null指针异常”的异常。这是我的密码,请告诉我该怎么做?提前谢谢 MainActivity.javaJava Android:Sting返回空指针异常,java,android,eclipse,nullpointerexception,android-edittext,Java,Android,Eclipse,Nullpointerexception,Android Edittext,我的记事本代码有问题。我制作了一个带有保存按钮的记事本,它首先显示我们在点击按钮时输入的字符串。为此,我创建了一个名为“linededitext.java”的类,但当我运行代码时,得到了一个名为“Null指针异常”的异常。这是我的密码,请告诉我该怎么做?提前谢谢 MainActivity.java public class NotePadActivity extends Activity { LinedEditText noteTxt; Button re
public class NotePadActivity extends Activity {
LinedEditText noteTxt;
Button remind, save, cancel;
String str="";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.notepad);
noteTxt=(LinedEditText)findViewById(R.id.noteTxt);
save = (Button) findViewById(R.id.saveBtn);
cancel = (Button) findViewById(R.id.cancelBtn);
save.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String str = (noteTxt.getText()).toString();
Log.i("Notepad String:", "" + str);
}
});
save.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String str = noteTxt.getText().toString();// GETTING EXCEPTION HERE
Log.i("Notepad String:", "" + str);
}
});
linededitext.java
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.EditText;
public class LinedEditText extends EditText {
private Rect mRect;
private Paint mPaint;
// we need this constructor for LayoutInflater
public LinedEditText(Context context, AttributeSet attrs) {
super(context, attrs);
mRect = new Rect();
mPaint = new Paint();
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
// mPaint.setColor(R.color.edit_note_line); // SET YOUR OWN COLOR HERE
}
@Override
protected void onDraw(Canvas canvas) {
// int count = getLineCount();
int height = getHeight();
int line_height = getLineHeight();
int count = height / line_height;
if (getLineCount() > count)
count = getLineCount();// for long text with scrolling
Rect r = mRect;
Paint paint = mPaint;
int baseline = getLineBounds(0, r);// first line
for (int i = 0; i < count; i++) {
canvas.drawLine(r.left, baseline + 1, r.right, baseline + 1, paint);
baseline += getLineHeight();// next line
}
super.onDraw(canvas);
}
}
例外情况是
09-28 11:26:57.494: E/AndroidRuntime(507): FATAL EXCEPTION: main
09-28 11:26:57.494: E/AndroidRuntime(507): java.lang.NullPointerException
09-28 11:26:57.494: E/AndroidRuntime(507): at com..NotePadActivity$2.onClick(NotePadActivity.java:49)
09-28 11:26:57.494: E/AndroidRuntime(507): at android.view.View.performClick(View.java:2485)
09-28 11:26:57.494: E/AndroidRuntime(507): at android.view.View$PerformClick.run(View.java:9080)
09-28 11:26:57.494: E/AndroidRuntime(507): at android.os.Handler.handleCallback(Handler.java:587)
09-28 11:26:57.494: E/AndroidRuntime(507): at android.os.Handler.dispatchMessage(Handler.java:92)
09-28 11:26:57.494: E/AndroidRuntime(507): at android.os.Looper.loop(Looper.java:123)
09-28 11:26:57.494: E/AndroidRuntime(507): at android.app.ActivityThread.main(ActivityThread.java:3683)
09-28 11:26:57.494: E/AndroidRuntime(507): at java.lang.reflect.Method.invokeNative(Native Method)
09-28 11:26:57.494: E/AndroidRuntime(507): at java.lang.reflect.Method.invoke(Method.java:507)
09-28 11:26:57.494: E/AndroidRuntime(507): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-28 11:26:57.494: E/AndroidRuntime(507): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-28 11:26:57.494: E/AndroidRuntime(507): at dalvik.system.NativeStart.main(Native Method)
为LinedEditText类添加所有三个默认构造函数。它可能会解决你的问题
public LinedEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public LinedEditText(Context context, AttributeSet attrs) {
super(context, attrs);
mRect = new Rect();
mPaint = new Paint();
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
}
public LinedEditText(Context context) {
super(context);
}
您已经在此处为TextView定义了id noteTxt。
因此,请更改LinedItemText视图的id。。
代码相同。。
linededitext noteEdt;
noteEdt=(linededitext)findViewById(R.id.noteEdt);
您是否在主活动中声明noteTxt?并获取对其的引用?请在此处添加主活动代码。。。。我想你忘了在MainActivity中声明noteTxt。请阅读堆栈跟踪。异常发生在NotePadActivity.java的第49行。这一行有空的东西。这一行代码是什么?可能与包名有关,请确保在xml中传递给linededitext
的包名应该是正确的。能否检查noteTxt=(linededitext)行后noteTxt的值是否为findViewById(R.id.noteTxt)代码>是否为空?非常好的建议。@Brijesh Patel:完成了。如何在MainActivity.java中声明该视图?我在MainActivity.java中的声明是否正确?因为现在我得到了异常09-28 12:09:05.823:E/AndroidRuntime(810):java.lang.RuntimeException:无法启动活动组件信息{com.ashish.ashish/com.ashish.ashish.NotePadActivity}:java.lang.ClassCastException:android.widget.textView其他一切都应该保持不变。这基本上是构造函数重载。您可以将初始化代码(超级调用后的代码)复制到所有三个构造函数,或者在两个构造函数中使用this(context,null,0)
和this(context,attrs,0)
将调用传递给一个构造函数。在这种情况下,初始化代码将进入public linededitext(上下文上下文、属性集attrs、int defStyle)
中。使用布局xml和NotepadActivity(ctrl+l输入49)编辑您的问题,该行仅在此处发布我。已工作!!!!!!谢谢你,伙计!!!!!在过去的4个小时里,我像个白痴一样工作!!!谢谢:D
public LinedEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public LinedEditText(Context context, AttributeSet attrs) {
super(context, attrs);
mRect = new Rect();
mPaint = new Paint();
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
}
public LinedEditText(Context context) {
super(context);
}
you already defined id noteTxt for TextView here.
<TextView
android:id="@+id/noteTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="25dp"
android:layout_marginTop="25dp"
android:layout_weight="0.7"
android:text="Note"
android:textAlignment="center"
android:textColor="@android:color/white"
android:textSize="20dp" >
</TextView>
So change id for LinedEditText view..
<com.kalnirnay.kalnirnay.LinedEditText
android:id="@+id/noteEdt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/lin"
android:layout_marginLeft="25dp"
android:layout_marginRight="25dp"
android:layout_marginTop="25dp"
android:gravity="start"
android:height="200dp" >
</com.kalnirnay.kalnirnay.LinedEditText>
same in code..
LinedEditText noteEdt;
noteEdt=(LinedEditText)findViewById(R.id.noteEdt);