2016-08-10 2 views
0

Я продолжаю получать следующий сбой при попытке сохранить имя контактов, выбранных мной из контактной книги, в текстовое окно. Я не уверен, что здесь не так, потому что Toast показывает имя контактов, хранящееся в строковой переменной 'name', но когда я пытаюсь TextView.setText (name), я получаю исключение с нулевым указателем?Хранение контактного имени в строке

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/0r1-4F314D4F514D314B454331/1 flg=0x1 }} to activity {com.example.calvin.pickmeup/com.example.calvin.pickmeup.Home}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(int)' on a null object reference 

Главная:

private TextView Address; 
private TextView selectedContact; 
private String name; 
private final int PICK_CONTACT = 1; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.home); 

    Button currentLocation = (Button) findViewById(R.id.currentLocation); 
    Button chooseTime = (Button) findViewById(R.id.chooseTime); 
    Button chooseContact = (Button) findViewById(R.id.chooseContact); 
    TextView Address = (TextView) findViewById(R.id.Address); 
    TextView selectedContact = (TextView) findViewById(R.id.selectedContact); 
    final TextView selectedTime = (TextView) findViewById(R.id.selectedTime); 

    currentLocation.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(Home.this, MapsActivity.class); 
      startActivity(intent); 
     } 
    }); 

    chooseTime.setOnClickListener(new View.OnClickListener(){ 

     @Override 
     public void onClick(View v) { 
      Calendar mcurrentTime = Calendar.getInstance(); 
      int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY); 
      int minute = mcurrentTime.get(Calendar.MINUTE); 
      TimePickerDialog mTimePicker; 
      mTimePicker = new TimePickerDialog(Home.this, new TimePickerDialog.OnTimeSetListener() { 
       @Override 
       public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) { 
        selectedTime.setText(selectedHour + ":" + selectedMinute); 
       } 
      }, hour, minute, true);//Yes 24 hour time 
      mTimePicker.setTitle("Select Time"); 
      mTimePicker.show(); 
     } 
    }); 

    Bundle extras = getIntent().getExtras(); 
    if(extras != null) { 
     String value = extras.getString("address"); 
     Address.setText(value); 
    } 
} 

public void callContacts(View v){ 

    Intent showContacts = new Intent (Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
    startActivityForResult(showContacts,PICK_CONTACT); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if(requestCode == PICK_CONTACT) { 
     if(resultCode == ActionBarActivity.RESULT_OK){ 
      Uri contactData = data.getData(); 
      Cursor c = getContentResolver().query(contactData, null,null,null,null); 
      if (c.moveToFirst()){ 
       name = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME_PRIMARY)); 
       Toast.makeText(this,"You've Picked:" + name, Toast.LENGTH_LONG).show(); 
       selectedContact.setText(name); 
      } 
     } 
    } 

} 

Проблема с:

selectedContact.setText (имя);

+0

CHange this 'TextView selectedContact = (TextView) findViewById (R.id.selectedContact) '; на 'selectedContact = (TextView) findViewById (R.id.selectedContact);' – Raghunandan

ответ

0

Вы определяете глобальную переменную:

private TextView Address; 
private TextView selectedContact; 

Изменить этот код:

TextView Address = (TextView) findViewById(R.id.Address); 
TextView selectedContact = (TextView) findViewById(R.id.selectedContact); 

и присвоить эти значения определенным глобальным переменным:

Address = (TextView) findViewById(R.id.Address); 
selectedContact = (TextView) findViewById(R.id.selectedContact); 
+0

Работая спасибо! Можете ли вы объяснить, почему? Java noob здесь. – YaWotMate

+1

вы изменяете локальные переменные в противном случае – PrisonMike

0

Вы не инициализирует глобальную переменную и создать другую локальную переменную удалить TextView

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.home); 

     Button currentLocation = (Button) findViewById(R.id.currentLocation); 
     Button chooseTime = (Button) findViewById(R.id.chooseTime); 
     Button chooseContact = (Button) findViewById(R.id.chooseContact); 
     TextView Address = (TextView) findViewById(R.id.Address); 
// remove TextView 
     selectedContact = (TextView) findViewById(R.id.selectedContact); 
     final TextView selectedTime = (TextView) findViewById(R.id.selectedTime); 

     currentLocation.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(Home.this, MapsActivity.class); 
       startActivity(intent); 
      } 
     }); 
Смежные вопросы