Android Studio ToDoApplication

0

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();
    }
}
0

parsujesz numer telefonu jako int.
Numer tel., choć składa się z cyfr, nie jest liczbą.

0
Phone item = phoneList.get(position);
String time = item.getTime();
Integer mytime = Integer.parseInt(time);

Parsowanie zwraca Ci błąd gdyż, twój time jest nullem. Sprawdź co siedzi na Phone podczas jego tworzenia.

0
AnyKtokolwiek napisał(a):

parsujesz numer telefonu jako int.
Numer tel., choć składa się z cyfr, nie jest liczbą.

Jak mógłbym rozwiązać ten problem?

0
kixe52 napisał(a):
Phone item = phoneList.get(position);
String time = item.getTime();
Integer mytime = Integer.parseInt(time);

Parsowanie zwraca Ci błąd gdyż, twój time jest nullem. Sprawdź co siedzi na Phone podczas jego tworzenia.

public class Phone {

    private int id;
    private String time;
    private String title;
    private String person;
    private String phone;

    public String getTime() {
        return time;
    }
    public void setTime(String time) {
        this.time = time;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getPerson() {
        return person;
    }
    public void setPerson(String person) {
        this.person = person;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }

    public Phone(int id, String title, String time, String person, String phone)
    {
        this.time = time;
        this.title = title;
        this.person = person;
        this.phone = phone;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

}
```java

Tak wyglada phone
0

Nie rozumiem tego błedu, gdyż np AddMail i ShowMail robilem analogicznie a żadnego błedu tam nie wywala.

EmailListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long rowId) {

                MailItem item = emailList.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(
                        ShowMail.this);
                adb.setTitle("Email");
                adb.setMessage("Temat:  \t" + item.getTitle() +
                        "\nOsoba:  \t" + item.getPerson() +
                        "\nAdres email:\t" + item.getEmail() +
                        "\nData:  \t" + timestamp);
                adb.setPositiveButton("Ok", null);
                adb.show();

            }
        });
``` Tak wyglada ten fragment z ShowMail
0

Widzę, że ignorujesz mój komentarz, więc tym razem napiszę to samo ale w poście :)

Powiedziałem podczas tworzenia a nie w kodzie klasy Phone :) W kodzie z pierwszego posta nie widzę abyś wywoływał konstruktor dla Phone, więc tworzysz to jakoś inaczej. Sprawdź w debuggerze co masz w private ListView PhonesList;

0

Problem rozwiązany. Błąd był w AddPhone zamiast:

                                values.put(TodoTask.TaskPhone.KOLUMNA_DATETIME, date.getTime() / 1000);

było

                                values.put(TodoTask.TaskPhone.KOLUMNA_TYTUŁ, date.getTime() / 1000);

1 użytkowników online, w tym zalogowanych: 0, gości: 1