2015-08-18 3 views
0

У меня есть следующий сценарий в простом приложении: 1- пользователь нажимает кнопку меню на MainActivity, чтобы открыть другое действие на совершенно новом экране: addTimeActivity, где они могут ввести заметку и пора. 2- В новом действии есть два текста редактирования: время и примечание, пользователь вводит данные, а затем нажимает кнопку «Сохранить», или они могут нажать кнопку «Отмена», когда они не хотят сохранять заметку. 3- addTimeActiviy передает данные через намерение. 4- надстройка addTimeActivity. 5- Данные должны быть сохранены в адаптере, который, в свою очередь, отображает его как список в MainActivity, метод addTimeRecord в TimeTrackerAdapter добавляет данные String к временам ArrayList. Теперь, когда нажата кнопка сохранения, появляется исключение NullPointerException.Передача данных между действиями не работает

Вот MainActivity:

public class MainActivity extends ActionBarActivity { 

ListView listView; 
TimeTrackerAdapter timeTrackerAdapter; 
public static final int TIME_ENTRY_REQUEST_CODE=1; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    timeTrackerAdapter=new TimeTrackerAdapter(); 
    listView=(ListView) findViewById(R.id.recordList); 
    listView.setAdapter(timeTrackerAdapter); 
} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    super.onCreateOptionsMenu(menu); 
    MenuInflater menuInflater=getMenuInflater(); 
    menuInflater.inflate(R.menu.menu_list_item, menu); 
    return true; 
} 
protected void onActivityResult(int requestCode,int resultCode,Intent data) 
{ 
    if(requestCode==TIME_ENTRY_REQUEST_CODE) 
     { 
     if(resultCode==RESULT_OK) 
     { 
     Bundle extras=getIntent().getExtras(); 
     String time=extras.getString("time"); 
     String notes=extras.getString("notes"); 
     timeTrackerAdapter.addTimeRecord(time, notes); 
     timeTrackerAdapter.notifyDataSetChanged(); 
     } 
    } 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    if(item.getItemId()==R.id.add_time_menu_item) 
    { 
     Intent intent=new Intent(getApplicationContext(),AddTimeActivity.class); 
     startActivityForResult(intent,TIME_ENTRY_REQUEST_CODE); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} } 

и вот addTimeActivity:

public class AddTimeActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.add_time); 
} 
public void onCancel(View view) 
{ 
    finish(); 
} 
public void onSave(View view) 
{ 
    Intent intent = new Intent(AddTimeActivity.this,MainActivity.class); 
    EditText editTextNotes=(EditText) findViewById(R.id.notes_edit_text); 
    intent.putExtra("notes",editTextNotes.getText().toString()); 
    EditText editTextTime=(EditText) findViewById(R.id.time_edit_text); 
    intent.putExtra("time", editTextTime.getText().toString()); 
    this.setResult(RESULT_OK,intent); 
    startActivity(intent); 
    finish(); 

} 
} 

Адаптер:

public class TimeTrackerAdapter extends BaseAdapter{ 

ArrayList<TimeRecord> times=new ArrayList<TimeRecord>(); 
TextView timeView,noteView; 
@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return times.size(); 
} 
public TimeTrackerAdapter() 
{ 
} 

@Override 
public Object getItem(int index) { 
    // TODO Auto-generated method stub 
    return getItem(index); 
} 

@Override 
public long getItemId(int index) { 
    // TODO Auto-generated method stub 
    return index; 
} 

public void addTimeRecord(String time,String notes) 
{ 
    TimeRecord timeRecord=new TimeRecord(time,notes); 
    times.add(timeRecord); 
} 
@Override 
public View getView(int index, View view, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    if(view==null) 
    { 
     LayoutInflater inflater=LayoutInflater.from(parent.getContext()); 
     view=inflater.inflate(R.layout.time_tracker, parent,false); 
    } 
    TimeRecord time=times.get(index); 
    TextView timeText=(TextView) view.findViewById(R.id.timeText); 
    timeText.setText(time.getTime()); 
    TextView noteText=(TextView) view.findViewById(R.id.noteText); 
    noteText.setText(time.getNote()); 
    return view; 
} 
} 
+0

check onSave() onCancel() методы в AddTimeActivity. Надеюсь, что не будет переопределенных методов в классе Activity – Shriram

+0

Можете ли вы разместить свой код 'add_time'? – Prasad

+0

Я думаю, что вы установили метод onCancel для сохранения нажатия кнопки. Пожалуйста, проверьте xml один раз – Prasad

ответ

1

вы не инициализирует переменную члена timeTrackerAdapter! в вашем onCreate вы делаете это TimeTrackerAdapter timeTrackerAdapter=new TimeTrackerAdapter();, но должно быть timeTrackerAdapter=new TimeTrackerAdapter();

также вы используете неправильное намерение в своем onActivityResult. это должно быть так:

protected void onActivityResult(int requestCode,int resultCode,Intent data) // Intent data is the intent that includes the data of your AddTimeActivity 
{ 
    if(requestCode==TIME_ENTRY_REQUEST_CODE) 
    { 
    if(resultCode==RESULT_OK) 
    { 
     Bundle extras=data.getExtras(); // not getIntent().getExtras() 
     String time=extras.getString("time"); 
     String notes=extras.getString("notes"); 
     timeTrackerAdapter.addTimeRecord(time, notes); 
     timeTrackerAdapter.notifyDataSetChanged(); 
    } 
    } 
} 
+0

Я исправил эту ошибку, и я изменил ее в addTimeActivity, теперь кнопка сохранения возвращает мне основную активность, но данные не передаются. –

+0

- строки пустые/нулевые? – Rich

+0

Строковое время = extras.getString («время»); String notes = extras.getString ("notes"); эти две строки берут данные от намерения до завершения AddTimeActivity –

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