在android中创建联系人

时间:2015-03-13 00:58:13

标签: android android-layout android-activity

我正在创建一个部分创建联系人的应用。我有一个布局,用户可以使用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)

我不确定这个错误日志说的是什么。

3 个答案:

答案 0 :(得分:1)

你犯了以下错误

  1. 您尚未初始化联系对象并直接调用contact.getname()方法。这个方法抛出NullPointerException。

  2. 您的班级联系人应该是普通班级,不应该扩展活动。您必须将编辑文本代码从它移动到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);
            }
});
希望这有助于其他人