2013-12-10 4 views
0

Я пытаюсь создать экземпляр autocompleteTextview, и у меня есть адаптер, который заполняет список контактов. Когда пользователь выбирает контакт, я передаю номер мобильного телефона методу обратного вызова.Метод обратного вызова, предоставляющий исключение nullpointer Android

Вот мой интерфейс обратного вызова.

public interface OnTaskCompleted { 
     void taskCompleted(String errorMessage); 
} 

Вот как я создаю экземпляр своего пользовательского автозаполненияTextview.

myListener = new OnTaskCompleted() { 

      @Override 
      public void taskCompleted(String errorMessage) { 


      } 
     }; 
     SingleSelectContactmToField = new SingleSelectContact(getActivity().getApplicationContext(), myListener); 

Это мой класс SingleSelectContact.

public class SingleSelectContact extends MultiAutoCompleteTextView implements OnItemClickListener { 
    private OnTaskCompleted mListener; 
    public SingleSelectContact(Context context, OnTaskCompleted listener) { 
      super(context); 
      init(context); 
      mListener = listener; 
     } 
     /* Constructor */ 
     public SingleSelectContact(Context context, AttributeSet attrs) { 
      super(context, attrs); 
      init(context); 
     } 
     /* Constructor */ 
     public SingleSelectContact(Context context, AttributeSet attrs, 
       int defStyle) { 
      super(context, attrs, defStyle); 
      init(context); 
     } 
     /* set listeners for item click and text change */ 
     public void init(Context context){ 
      setOnItemClickListener(this); 
      addTextChangedListener(textWather); 
     } 


      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    Map<String, String> currentContact = (Map<String, String>)parent.getItemAtPosition(position); 
    String contactName = currentContact.get("Name"); 
    String contactId = currentContact.get("Number"); 
    setText(contactName); 
    setSelection(getText().length()); 
      mListener.taskCompleted(contactId); /*I GET A NULL POINTER EXECLPTION HERE*/ 
} 

У меня есть отладка, и я вижу, что в конструкторе слушатель получает экземпляр правильно. Но внутри onItemClick значение mListener показано равным нулю. Помощь приветствуется. Вот ошибка журнал я получаю

E/AndroidRuntime(24202): java.lang.NullPointerException 

E/AndroidRuntime(24202): at com.citrus.citruspay.SingleSelectContact.onItemClick(SingleSelectContact.java:119) 

E/AndroidRuntime(24202): at android.widget.AutoCompleteTextView.performCompletion(AutoCompleteTextView.java:902) 

E/AndroidRuntime(24202): at android.widget.AutoCompleteTextView.access$500(AutoCompleteTextView.java:91) 

E/AndroidRuntime(24202): at android.widget.AutoCompleteTextView$DropDownItemClickListener.onItemClick(AutoCompleteTextView.java:1192) 

E/AndroidRuntime(24202): at android.widget.AdapterView.performItemClick(AdapterView.java:298) 

E/AndroidRuntime(24202): at android.widget.AbsListView.performItemClick(AbsListView.java:1128) 

E/AndroidRuntime(24202): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2812) 

E/AndroidRuntime(24202): at android.widget.AbsListView$1.run(AbsListView.java:3571) 

E/AndroidRuntime(24202): at android.os.Handler.handleCallback(Handler.java:725) 

E/AndroidRuntime(24202): at android.os.Handler.dispatchMessage(Handler.java:92) 

E/AndroidRuntime(24202): at android.os.Looper.loop(Looper.java:153) 

E/AndroidRuntime(24202): at android.app.ActivityThread.main(ActivityThread.java:5299) 

E/AndroidRuntime(24202): at java.lang.reflect.Method.invokeNative(Native Method) 

E/AndroidRuntime(24202): at java.lang.reflect.Method.invoke(Method.java:511) 

E/AndroidRuntime(24202): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 

E/AndroidRuntime(24202): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 

E/AndroidRuntime(24202): at dalvik.system.NativeStart.main(Native Method) 
+0

Просьба указать трассировку стека? –

+0

отредактирован, проверьте. – user1051505

+0

попробуйте назначить слушателя перед вызовом 'init (context)'? –

ответ

0

Попробуйте определение вашего слушателя прямо в SingleSelectContact определения, как следующее. Чтобы создать экземпляр интерфейса, вам необходимо сначала его реализовать. Таким образом, вы не можете создать экземпляр интерфейса как ваш, но вы можете создать для него реализацию.

SingleSelectContact mToField = new SingleSelectContact(getActivity().getApplicationContext(), new OnTaskCompleted() { 

    @Override 
    public void taskCompleted(String errorMessage) { 


    } 
}); 
Смежные вопросы