2015-03-13 7 views
0

Я создаю приложение, которое частично создает контакт. У меня есть макет, где пользователь может ввести имя и адрес с помощью EditText. У меня есть класс с именем Контакты:Создание контакта в android

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, затем вызываю 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 
 
\t protected void onCreate(Bundle savedInstanceState){ 
 
\t \t super.onCreate(savedInstanceState); 
 
\t \t setContentView(R.layout.contacts_make); 
 
\t \t \t \t 
 
\t \t back = (Button) findViewById(R.id.Make_Cancel); 
 
\t \t make = (Button) findViewById(R.id.make_add); 
 
\t \t txtName = (EditText)findViewById(R.id.make_Name); 
 
\t \t txtAddress = (EditText)findViewById(R.id.make_Address); 
 
\t \t 
 
\t \t //Takes you back to the Contacts layout 
 
     back.setOnClickListener(new View.OnClickListener() { 
 
     \t 
 
      public void onClick(View view) { 
 

 
       Intent myIntent = new Intent(view.getContext(), Contacts.class); 
 
       startActivityForResult(myIntent, 0); 
 
      } 
 
     }); 
 
     
 
     make.setOnClickListener(new View.OnClickListener() { 
 
     \t 
 
      public void onClick(View view) { 
 
      \t contact.getName(txtName); 
 
      \t contact.getAddress(txtAddress); 
 

 

 
      } 
 
     }); 
 
    
 

 
\t } 
 
}

import android.widget.EditText; 
 

 

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

03-13 00: 25: 28,491: E/ресурсы (24776): RuntimeException

03-13 00:25: 28.491: E/Resources (24776): android.content.res.Resources $ NotFoundException: Идентификатор ресурса # 0x7f02029d

03-13 00: 25: 28,491: E/ресурсы (24776): в android.content.res.Resources.getValue (Resources.java:2333)

03-13 00: 25: 28.491: E/Resources (24776): at android.content.res.Resources.startRC (Resources.java:1059)

03-13 00: 25: 28.491: E/Resources (24776): at android.app.ActivityThread $ mRunnable.run (ActivityThread.java:2476)

03-13 00: 25: 28,491: E/Ресурсы (24776): в java.lang.Thread.run (Thread.java:818)

03-13 00: 26: 03.721: Е/AndroidRuntime (24776): неустранимый: Главный

03-13 00: 26: 03,721: Е/AndroidRuntime (24776): Процесс: edu.ecpi.myappv3, ПИД: 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: Е/AndroidRuntime (24776): в edu.ecpi.myappv3.Contacts_Make $ 2.onClick (Contacts_Make.java:53)

03-13 00: 26: 03,721: Е/AndroidRuntime (24776): на android.view.View.pe rformClick (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): at android.os.Handler.handleCallback (обработчик.Java: 739)

03-13 00: 26: 03,721: Е/AndroidRuntime (24776): в android.os.Handler.dispatchMessage (Handler.java:95)

03-13 00:26: 03.721: E/AndroidRuntime (24776): at android.os.Looper.loop (Looper.java:145)

03-13 00: 26: 03.721: E/AndroidRuntime (24776): at android.app.ActivityThread .main (ActivityThread.java:5837)

03-13 00: 26: 03,721: Е/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): 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)

Я не уверен, что говорит этот журнал ошибок.

ответ

1

вы сделали следующие ошибки

  1. Вы не инициализировать объект контакта и непосредственно вызывать метод contact.getname(). Здесь этот метод бросает NullPointerException.

  2. Контакты вашего класса должны иметь нормальный класс, он не должен распространять Activity. Вам нужно переместить текстовый код редактирования из него в контактную активность.

+0

Ok @Fahim Я отредактировал мой код выше, чтобы ответить на ошибки, и он выглядит правильно, но он все еще не работает. Что вы думаете? – Hausfer

+0

Какая ошибка? – Fahim

+0

Хорошо, я добавил свой журнал ошибок, но это не значит для меня. Это единственная часть, которая выглядит так, как будто это может означать что-то, но я не уверен. «Попытка вызвать виртуальный метод» void edu.ecpi.myappv3.Contact.setName (android.widget.EditText) »в ссылке на нулевой объект» – Hausfer

0

Можете ли вы дать нам исключение?

Где вы инициализировали свой атрибут contact? Вы пытаетесь позвонить .getName() без конкретизирующего контакта или какого-либо кода отсутствует?

Вы говорите, что кнопка работает, когда вы перемещаете ее в другую компоновку. Вы уверены, что в макете R.layout.contacts_make есть кнопка, обозначенная R.id.make_add?

+0

Контакт инициализируется в верхней. Да, в макете contacts_make есть кнопка R.id.make_add. Когда он не работал, я использовал код, который, как я знаю, работал, чтобы изменить кнопку на другой макет, и это сработало. – Hausfer

+0

Если вы не видите Toast, я думаю, что либо вы даже не достигли метода onClick, либо ваш контекст неверен. Не можете ли вы просто удалить try/catch и попытаться использовать отладчик (см. Значения переменных во время выполнения или, по крайней мере, увидеть полученную ошибку)? – DavidL

0

Спасибо @Fahim и всем за вашу помощь. После того, как я посмотрел и посмотрел, я окончательно понял, что мне нужно создать новые моменты моего класса Contact private Contact contact = new Contact(null, null, null);. Я изменил код вокруг на основе некоторых simalare коды и получил это:

import com.google.android.gms.maps.model.LatLng; 
 

 
import android.widget.EditText; 
 

 

 
public class Contact{ 
 
\t public String _name, _address; 
 
\t public LatLng _latlng; 
 
\t \t 
 
\t public Contact (String _name, String _address, LatLng _latlng){ 
 
\t \t this.setName(_name); 
 
\t \t this.setAddress(_address); 
 
\t \t this.setLatLng(_latlng); 
 
\t } 
 
\t public String etToSt (EditText _editText){ 
 
\t \t String test = _editText.getText().toString(); 
 
\t \t return test; 
 
\t } 
 
\t public void setName(String _name){ 
 
\t \t this._name = _name; 
 
\t \t 
 
\t } 
 
\t public String getName(){ 
 
\t \t return _name; 
 
\t } 
 
\t 
 
\t public void setAddress(String _address){ 
 
\t \t this._address = _address; 
 
\t \t 
 
\t } 
 
\t public String getAddress(){ 
 
\t \t 
 
\t \t return _address; 
 
\t \t 
 
\t } 
 
\t public void setLatLng(LatLng _latlng){ 
 
\t \t this._latlng = _latlng; 
 
\t \t 
 
\t } 
 
\t public LatLng getLng(){ 
 
\t \t return _latlng; 
 
\t } 
 
}

Тогда все, что я должен был добавить этот код был здесь.

make.setOnClickListener(new View.OnClickListener() { 
 
     \t 
 
      public void onClick(View view) { 
 
      \t String _name = (String) txtName.getText().toString(); 
 
      \t String _address = (String) txtAddress.getText().toString(); 
 
       contact.setName(_name); 
 
      \t contact.setAddress(_address); 
 
      } 
 
});
надеюсь, что это помогает кто-то еще

Смежные вопросы