Robię aplikacje na androida, prosta lista rzeczy do zrobienia. Typy rzeczy do wykonania: spotkanie, telefon, mail, notatka. Pozostałe działają, robiłem wszystkie analogicznie, lecz w pewnym momencie otrzymuje błąd gdy probuje wyswietlic telefon ktory dodalem juz do listy:
java.lang.NumberFormatException: Invalid int: "null"
at java.lang.Integer.invalidInt(Integer.java:138)
at java.lang.Integer.parseInt(Integer.java:358)
at java.lang.Integer.parseInt(Integer.java:334)
at com.example.todolist.ShowPhone$2.onItemClick(ShowPhone.java:59)
ShowPhone.java
package com.example.todolist;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.app.AlertDialog;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
public class ShowPhone extends AppCompatActivity {
private DatabaseHelper DatabaseHelper;
private ListView PhoneListView;
private ArrayAdapter<String> PhoneAdapter;
public List<Phone> phoneList;
private Button add_new_item_btn;
private static final int ADD_NEW_ITEM_REQUEST_CODE = 101;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.show_phone);
DatabaseHelper = new DatabaseHelper(this);
PhoneListView = findViewById(R.id.phone_list);
phoneList = new PhoneListSQL(this).getListPhoneItems();
add_new_item_btn = findViewById(R.id.phone_list_add_btn);
add_new_item_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(), AddPhone.class);
startActivityForResult(intent,ADD_NEW_ITEM_REQUEST_CODE);
}
});
PhoneListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long rowId) {
// Cursor c = (Cursor) parent.getAdapter().getItem(position);
Phone item = phoneList.get(position);
String time = item.getTime();
Integer mytime = Integer.parseInt(time);
java.util.Date time2= new java.util.Date((long)mytime*1000);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy H:mm");
String timestamp = simpleDateFormat.format(time2);
AlertDialog.Builder adb = new AlertDialog.Builder(
ShowPhone.this);
adb.setTitle("Telefon");
adb.setMessage("Temat: \t" + item.getTitle() +
"\nOsoba:\t" + item.getPerson() +
"\nNr: \t" + item.getPhone() +
"\nData: \t" + timestamp);
adb.setPositiveButton("Ok", null);
adb.show();
}
});
updatePhoneList();
}
private void updatePhoneList() {
ArrayList<String> taskList = new ArrayList<>();
SQLiteDatabase db = DatabaseHelper.getReadableDatabase();
Cursor cursor = db.query(TodoTask.TaskPhone.Table, new String[]{TodoTask.TaskPhone._ID, TodoTask.TaskPhone.KOLUMNA_TYTUŁ},null,null,null,null,null);
while(cursor.moveToNext()){
int title= cursor.getColumnIndex(TodoTask.TaskPhone.KOLUMNA_TYTUŁ);
taskList.add(cursor.getString(title));
}
if(PhoneAdapter == null){
PhoneAdapter = new ArrayAdapter<>(this,
R.layout.item_list, // what view to use for the items
R.id.task_title, // where to put the strings of data
taskList); // where to get all the data
PhoneListView.setAdapter(PhoneAdapter); //set it as the adapter for the ListView instance
}else{
PhoneAdapter.clear();
PhoneAdapter.addAll(taskList);
PhoneAdapter.notifyDataSetChanged();
}
cursor.close();
db.close();
}
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK){
Intent refresh = new Intent(this, ShowPhone.class);
startActivity(refresh);
this.finish();
}
}
public void deleteTask(View view) {
View parent = (View) view.getParent();
TextView taskTextView = parent.findViewById(R.id.task_title);
String task = String.valueOf(taskTextView.getText());
SQLiteDatabase db = DatabaseHelper.getWritableDatabase();
db.delete(TodoTask.TaskPhone.Table,
TodoTask.TaskPhone.KOLUMNA_TYTUŁ + " = ?",
new String[]{task});
db.close();
updatePhoneList();
}
}
AddPhone.java
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TimePicker;
import android.widget.Toast;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class AddPhone extends AppCompatActivity {
private DatabaseHelper DatabaseHelper;
private ArrayAdapter<String> PhoneAdapter;
private ListView PhonesList;
private String date_time;
private int Year;
private int Month;
private int Day;
private int Hour;
private int Minute;
private Button date_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_phone);
DatabaseHelper = new DatabaseHelper(this);
PhonesList = (ListView) findViewById(R.id.phone_list);
TimeZone.setDefault(TimeZone.getTimeZone("Paris"));
date_btn = (Button)findViewById(R.id.add_phone_date_btn);
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Paris"));
Year = calendar.get(Calendar.YEAR);
Month = calendar.get(Calendar.MONTH);
Day = calendar.get(Calendar.DAY_OF_MONTH);
Hour = calendar.get(Calendar.HOUR_OF_DAY);
Minute= calendar.get(Calendar.MINUTE);
@SuppressLint("SimpleDateFormat") SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm");
date_btn.setText(sdf.format(new Date()));
date_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { datePicker(); }
});
Button addListItemButton = findViewById(R.id.add_phone_btn);
addListItemButton.setOnClickListener(new AddNewItemListener());
}
private class AddNewItemListener implements View.OnClickListener
{
@Override
public void onClick(View v) {
try
{
String title = ((EditText)findViewById(R.id.editText_phone_subject)).getText().toString();
String person = ((EditText)findViewById(R.id.editText_name_phone)).getText().toString();
String phone = ((EditText)findViewById(R.id.editText_phone_phone)).getText().toString();
if (title.equals("Topic") || person.equals("Person") || phone.equals("Phone")) {
Toast.makeText(getBaseContext(), "Wypelnij wszystkie pola", Toast.LENGTH_LONG).show();
}
else {
SQLiteDatabase db = DatabaseHelper.getWritableDatabase();
ContentValues values= new ContentValues();
String sql = "SELECT * FROM phone WHERE tittle = '" + title + "'";
Cursor cursor = db.rawQuery(sql, null);
if (!cursor.moveToFirst()) {
values.put(TodoTask.TaskPhone.KOLUMNA_TYTUŁ, title);
values.put(TodoTask.TaskPhone.KOLUMNA_OSOBA, person);
values.put(TodoTask.TaskPhone.KOLUMNA_NR, phone);
@SuppressLint("SimpleDateFormat") DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy H:mm");
try {
if (date_time != null) {
Date date = formatter.parse(date_time);
values.put(TodoTask.TaskPhone.KOLUMNA_TYTUŁ, date.getTime() / 1000);
cursor.close();
db.insertWithOnConflict(TodoTask.TaskPhone.Table,
null,
values,
SQLiteDatabase.CONFLICT_REPLACE);
db.close();
setResult(RESULT_OK, null);
finish();
} else {
Toast.makeText(getBaseContext(), "Ustaw date i czas", Toast.LENGTH_LONG).show();
}
} catch (ParseException e) {
Log.e("App", "exception", e);
}
}
else {
Toast.makeText(getBaseContext(), "Ten tytul juz istnieje", Toast.LENGTH_LONG).show();
}
}
} catch (Exception e) {
Log.e("App", "exception", e);
}
}
}
void updateDateButton() {
date_time = Day + "/" +(Month + 1) + "/" + Year + " "
+ Hour + ":" + Minute;
String toUpdate;
toUpdate = CustomDateFactory("dd/MM/yyyy H:mm",
"EEE, d MMM yyyy HH:mm",
date_time);
date_btn.setText(toUpdate);
}
String CustomDateFactory(String expectedPattern, String outputPattern, String input) {
SimpleDateFormat formatter = new SimpleDateFormat(expectedPattern);
try {
SimpleDateFormat sdf = new SimpleDateFormat(outputPattern);
Date date = formatter.parse(input);
String output = sdf.format(date);
return (output);
}
catch (ParseException e) {
e.printStackTrace();
}
return (null);
}
private void datePicker(){
DatePickerDialog datePickerDialog = new DatePickerDialog(this,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
if (view.isShown()) {
Year = year;
Month = monthOfYear;
Day = dayOfMonth;
updateDateButton();
timePicker();
}
}
}, Year, Month, Day);
datePickerDialog.setTitle("Wybierz dzien");
datePickerDialog.show();
}
private void timePicker(){
TimePickerDialog timePickerDialog = new TimePickerDialog(this,
new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
if (view.isShown()) {
Hour = hourOfDay;
minute = minute;
updateDateButton();
}
}
}, Hour, Minute, false);
timePickerDialog.setTitle("Wybierz godzine");
timePickerDialog.show();
}
}