在 android 中创建联系人

Creating a contact in android

我正在创建一个应用程序,该应用程序在一定程度上创建了一个联系人。我有一个布局,用户可以在其中使用 EditText 输入姓名和地址。我有一个 class 联系人:

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,这对我来说很有意义,但它仍然无法正常工作。我只是停下来。哦,我确实初始化了 Contacts_Make class 顶部附近的联系人,然后调用 contact.getName(txtName); contact.getAddress(txt地址);.这样对吗?

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: 资源 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): 在 java.lang.Thread.run(Thread.java:818)

03-13 00:26:03.721:E/AndroidRuntime(24776):致命异常:main

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:尝试在空对象引用[=15= 上调用虚拟方法'void edu.ecpi.myappv3.Contact.setName(android.widget.EditText)' ]

03-13 00:26:03.721: E/AndroidRuntime(24776): 在 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):在 java.lang.reflect.Method.invoke(本机方法)

03-13 00:26:03.721: E/AndroidRuntime(24776): 在 java.lang.reflect.Method.invoke(Method.java:372)

03-13 00:26:03.721: E/AndroidRuntime(24776): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)

03-13 00:26:03.721: E/AndroidRuntime(24776): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)

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

你能给我们提出的异常吗?

你在哪里初始化你的 contact 属性?您试图在没有实例化联系人的情况下调用 .getName(),或者缺少某些代码?

你说当你把按钮移到另一个布局时它会起作用。您确定 R.layout.contacts_make 布局有一个由 R.id.make_add 标识的按钮吗?

你犯了以下错误

  1. 你没有初始化联系人对象,直接调用了contact.getname()方法。这里这个方法抛出 NullPointerException.

  2. 您的 class 联系人应该是正常的 class,不应扩展 Activity。您必须将编辑文本代码从它移动到 contact_make activity。

感谢@Fahim 和大家的帮助。看了又看,我终于明白我必须为我的联系人 class 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);
            }
});
希望这对其他人有帮助