我正在创建一个部分创建联系人的应用。我有一个布局,用户可以使用EditText输入名称和地址。我有一个名为Contact的课程:
public class Contact extends Activity{
private String _name, _address, _lat, _lng;
private EditText txtName, txtAddress;
public Contact (String name, String address, String Lat, String Long){
_name = name;
_address = address;
}
public String getName(){
txtName = (EditText)findViewById(R.id.make_Name);
if (txtName != null)
{
_name = txtName.getText().toString();
}
return _name;
}
public String getAddress(){
txtAddress = (EditText)findViewById(R.id.make_Name);
if (txtAddress != null)
{
_address = txtAddress.getText().toString();
}
return _address;
}
}
布局有一个按钮,可以获取名称和地址
public class Contacts_Make extends Activity{
private Button make;
Context context;
private Contact contact;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.contacts_make);
make = (Button) findViewById(R.id.make_add);
make.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
try {
contact.getName();
Toast.makeText(context, name, Toast.LENGTH_SHORT).show();
} catch (Throwable e){
Toast.makeText(context, ""+e, Toast.LENGTH_SHORT).show();
}
try {
contact.getAddress();
Toast.makeText(context, address, Toast.LENGTH_SHORT).show();
} catch (Throwable e){
Toast.makeText(context, ""+e, Toast.LENGTH_SHORT).show();
}
}
});
}
}
每次按下按钮,我的应用程序都停止工作,我从来没有得到任何祝酒,但如果我做了一些事情,比如转移到不同的布局(已知良好的代码)按钮工作。 有什么想法吗?
更新: 谢谢@Fahim我改变了下面的代码,我更喜欢它。现在我将EditText传递给get' s它对我有意义,但它仍然无效。我就停下来哦,我确实初始化了Contacts_Make类顶部附近的联系人,然后调用contact.getName(txtName); contact.getAddress(txtAddress);.这是对的吗?
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class Contacts_Make extends Activity{
private Button back;
private Button make;
private EditText txtName;
private EditText txtAddress;
Context context;
private Contact contact;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.contacts_make);
back = (Button) findViewById(R.id.Make_Cancel);
make = (Button) findViewById(R.id.make_add);
txtName = (EditText)findViewById(R.id.make_Name);
txtAddress = (EditText)findViewById(R.id.make_Address);
//Takes you back to the Contacts layout
back.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent myIntent = new Intent(view.getContext(), Contacts.class);
startActivityForResult(myIntent, 0);
}
});
make.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
contact.getName(txtName);
contact.getAddress(txtAddress);
}
});
}
}

import android.widget.EditText;
public class Contact{
private String _name, _address, _lat, _lng;
//private EditText txtName, txtAddress;
public Contact (String name, String address, String Lat, String Long){
_name = name;
_address = address;
_lat = Lat;
_lng = Long;
}
public String getName(EditText name){
if (name != null)
{
_name = name.getText().toString();
}
return _name;
}
public String getAddress(EditText address){
if (address != null)
{
_address = address.getText().toString();
}
return _address;
}
public String getLat(){
return _lat;
}
public String getLng(){
return _lng;
}
}

03-13 00:25:28.491:E / Resources(24776):RunTimeException
03-13 00:25:28.491:E / Resources(24776):android.content.res.Resources $ NotFoundException:Resource ID#0x7f02029d
03-13 00:25:28.491:E / Resources(24776):在android.content.res.Resources.getValue(Resources.java:2333)
03-13 00:25:28.491:E / Resources(24776):在android.content.res.Resources.startRC(Resources.java:1059)
03-13 00:25:28.491:E / Resources(24776):在android.app.ActivityThread $ mRunnable.run(ActivityThread.java:2476)
03-13 00:25:28.491:E / Resources(24776):at java.lang.Thread.run(Thread.java:818)
03-13 00:26:03.721:E / AndroidRuntime(24776):致命异常:主
03-13 00:26:03.721:E / AndroidRuntime(24776):进程:edu.ecpi.myappv3,PID:24776
03-13 00:26:03.721:E / AndroidRuntime(24776):java.lang.NullPointerException:尝试调用虚方法' void edu.ecpi.myappv3.Contact.setName(android.widget.EditText )'在空对象引用上
03-13 00:26:03.721:E / AndroidRuntime(24776):at edu.ecpi.myappv3.Contacts_Make $ 2.onClick(Contacts_Make.java:53)
03-13 00:26:03.721:E / AndroidRuntime(24776):在android.view.View.performClick(View.java:5162)
03-13 00:26:03.721:E / AndroidRuntime(24776):在android.view.View $ PerformClick.run(View.java:20873)
03-13 00:26:03.721:E / AndroidRuntime(24776):在android.os.Handler.handleCallback(Handler.java:739)
03-13 00:26:03.721:E / AndroidRuntime(24776):在android.os.Handler.dispatchMessage(Handler.java:95)
03-13 00:26:03.721:E / AndroidRuntime(24776):在android.os.Looper.loop(Looper.java:145)
03-13 00:26:03.721:E / AndroidRuntime(24776):在android.app.ActivityThread.main(ActivityThread.java:5837)
03-13 00:26:03.721:E / AndroidRuntime(24776):at java.lang.reflect.Method.invoke(Native Method)
03-13 00:26:03.721:E / AndroidRuntime(24776):at java.lang.reflect.Method.invoke(Method.java:372)
03-13 00:26:03.721:E / AndroidRuntime(24776):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1388)
03-13 00:26:03.721:E / AndroidRuntime(24776):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
我不确定这个错误日志说的是什么。
答案 0 :(得分:1)
你犯了以下错误
您尚未初始化联系对象并直接调用contact.getname()方法。这个方法抛出NullPointerException。
您的班级联系人应该是普通班级,不应该扩展活动。您必须将编辑文本代码从它移动到contact_make活动。
答案 1 :(得分:0)
你能给我们提出例外吗?
您在哪里初始化了contact
属性?你试图在没有实例化联系的情况下调用.getName()
,或者缺少某些代码?
当您将按钮移动到另一个布局时,您说该按钮有效。您确定R.layout.contacts_make
布局是否有R.id.make_add
标识的按钮?
答案 2 :(得分:0)
感谢@Fahim和大家的帮助。看完后,我最终明白我必须创建一个新的联系类private Contact contact = new Contact(null, null, null);
的时刻。我根据一些simalare代码更改了一些代码并得到了这个:
import com.google.android.gms.maps.model.LatLng;
import android.widget.EditText;
public class Contact{
public String _name, _address;
public LatLng _latlng;
public Contact (String _name, String _address, LatLng _latlng){
this.setName(_name);
this.setAddress(_address);
this.setLatLng(_latlng);
}
public String etToSt (EditText _editText){
String test = _editText.getText().toString();
return test;
}
public void setName(String _name){
this._name = _name;
}
public String getName(){
return _name;
}
public void setAddress(String _address){
this._address = _address;
}
public String getAddress(){
return _address;
}
public void setLatLng(LatLng _latlng){
this._latlng = _latlng;
}
public LatLng getLng(){
return _latlng;
}
}
然后我必须添加的是此代码。
make.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
String _name = (String) txtName.getText().toString();
String _address = (String) txtAddress.getText().toString();
contact.setName(_name);
contact.setAddress(_address);
}
});