mercredi 3 juin 2015

Android Studio Simple TODO List - doesnt worke when i try add a new tasks

I exercises have done in a simple list of tasks. Here's the code of my class TODOFragment

package pl.edu.ug.aib.studentizerApp.fragment;

import android.annotation.TargetApi;


import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.Toast;

import org.androidannotations.annotations.EFragment;

import java.util.ArrayList;
import java.util.List;
import android.support.v4.app.Fragment;
import pl.edu.ug.aib.studentizerApp.R;
import pl.edu.ug.aib.studentizerApp.todoList.DatabaseHandler;
import pl.edu.ug.aib.studentizerApp.todoList.Task;

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@EFragment(R.layout.fragment_todo)
public class TODOFragment extends android.support.v4.app.Fragment {

    EditText zadanieTxt, opisTxt, dataTxt, adresTxt;
    List<Task> Tasks = new ArrayList<Task>();
    ListView TaskListView;
    DatabaseHandler dbHandler;
    @Override
    public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        return inflater.inflate(R.layout.fragment_todo, container, false);
    }
    @Override
    public void onStart() {
        super.onStart();


        zadanieTxt = (EditText) getView().findViewById(R.id.txtZadanie);
        opisTxt = (EditText) getView().findViewById(R.id.txtOpis);
        dataTxt = (EditText) getView().findViewById(R.id.txtData);
        adresTxt = (EditText) getView().findViewById(R.id.txtAdres);
        TaskListView = (ListView) getView().findViewById(R.id.listView);
        dbHandler = new DatabaseHandler(getActivity().getApplicationContext());

        TabHost tabHost = (TabHost) getView().findViewById(R.id.baner);

        tabHost.setup();

        TabHost.TabSpec tabSpec = tabHost.newTabSpec("Dodaj zadanie");
        tabSpec.setContent(R.id.tabZadanie);
        tabSpec.setIndicator("Dodaj Zadanie");
        tabHost.addTab(tabSpec);

        tabSpec = tabHost.newTabSpec("lista");
        tabSpec.setContent(R.id.tabListaZadan);
        tabSpec.setIndicator("Lista");
        tabHost.addTab(tabSpec);

        final Button addBtn = (Button) getView().findViewById(R.id.btnAdd);
        addBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Task task = new Task(dbHandler.getTaskCount(), String.valueOf(zadanieTxt.getText()), String.valueOf(opisTxt.getText()), String.valueOf(dataTxt.getText()), String.valueOf(adresTxt.getText()));
                if (!taskExists(task)) {
                    dbHandler.createZadanie(task);
                    Tasks.add(task);
                    Toast.makeText(getActivity().getApplicationContext(), String.valueOf(zadanieTxt.getText()) + " zostało dodane do listy zadań!", Toast.LENGTH_SHORT).show();
                    return;
                }
                Toast.makeText(getActivity().getApplicationContext(), String.valueOf(zadanieTxt.getText()) + " Zadanie już istnieje", Toast.LENGTH_SHORT).show();
            }
        });

        zadanieTxt.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
                addBtn.setEnabled(String.valueOf(zadanieTxt.getText()).trim().length() > 0);
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });



        if (dbHandler.getTaskCount() != 0)
            Tasks.addAll(dbHandler.getAllTasks());

        populateList();
    }

    private boolean taskExists(Task task) {
        String zadanie = task.getZadanie();
        int taskCount = Tasks.size();

        for (int i = 0; i < taskCount; i++) {
            if (zadanie.compareToIgnoreCase(Tasks.get(i).getZadanie()) == 0)
                return true;
        }
        return false;
    }


    private void populateList() {
        ArrayAdapter<Task> adapter = new TaskListAdapter();
        TaskListView.setAdapter(adapter);
    }

    private class TaskListAdapter extends ArrayAdapter<Task> {
        public TaskListAdapter()
        {

            super (TODOFragment.this.getActivity(), R.layout.listview_item, Tasks);
        }

        @Override
        public View getView(int position, View view, ViewGroup parent) {
            if (view == null)
                view = getActivity().getLayoutInflater().inflate(R.layout.listview_item, parent, false);

            Task currentTask = Tasks.get(position);

            TextView zadanie = (TextView) view.findViewById(R.id.zadanie);
            zadanie.setText(currentTask.getZadanie());
            TextView opis = (TextView) view.findViewById(R.id.opis);
            opis.setText(currentTask.getOpis());
            TextView data = (TextView) view.findViewById(R.id.data);
            data.setText(currentTask.getData());
            TextView adres = (TextView) view.findViewById(R.id.adres);
            adres.setText(currentTask.getAdres());

            return view;
        }
    }



}

And my DatabaseHandler

package pl.edu.ug.aib.studentizerApp.todoList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Kisiel on 2015-06-02.
 */
public class DatabaseHandler extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;

    private static final String DATABASE_NAME = "ZadaniaManager",
            TABLE_ZADANIA = "zadania",
            KEY_ID = "id",
            KEY_ZADANIE = "zadanie",
            KEY_OPIS = "opis",
            KEY_DATA = "data",
            KEY_ADRES = "adres";

    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_ZADANIA + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_ZADANIE + " TEXT," + KEY_OPIS + " TEXT," + KEY_DATA + " TEXT," + KEY_ADRES + " TEXT)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_ZADANIA);

        onCreate(db);
    }

    public void createZadanie(Task task) {
        SQLiteDatabase db = getWritableDatabase();

        ContentValues values = new ContentValues();

        values.put(KEY_ZADANIE, task.getZadanie());
        values.put(KEY_OPIS, task.getOpis());
        values.put(KEY_DATA, task.getData());
        values.put(KEY_ADRES, task.getAdres());

        db.insert(TABLE_ZADANIA, null, values);
        db.close();
    }

    public Task getTask(int id) {
        SQLiteDatabase db = getReadableDatabase();

        Cursor cursor = db.query(TABLE_ZADANIA, new String[] { KEY_ID, KEY_ZADANIE, KEY_OPIS, KEY_DATA, KEY_ADRES }, KEY_ID + "=?", new String[] { String.valueOf(id) }, null, null, null, null );

        if (cursor != null)
            cursor.moveToFirst();

        Task task = new Task(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4));
        db.close();
        cursor.close();
        return task;
    }

    public void deleteTask(Task task) {
        SQLiteDatabase db = getWritableDatabase();
        db.delete(TABLE_ZADANIA, KEY_ID + "=?", new String[] { String.valueOf(task.getId()) });
        db.close();
    }

    public int getTaskCount() {
        SQLiteDatabase db = getReadableDatabase();
        Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_ZADANIA, null);
        int count = cursor.getCount();
        db.close();
        cursor.close();

        return count;
    }

    public int updateTask(Task task) {
        SQLiteDatabase db = getWritableDatabase();

        ContentValues values = new ContentValues();

        values.put(KEY_ZADANIE, task.getZadanie());
        values.put(KEY_OPIS, task.getOpis());
        values.put(KEY_DATA, task.getData());
        values.put(KEY_ADRES, task.getAdres());

        int rowsAffected = db.update(TABLE_ZADANIA, values, KEY_ID + "=?", new String[] { String.valueOf(task.getId()) });
        db.close();

        return rowsAffected;
    }

    public List<Task> getAllTasks() {
        List<Task> tasks = new ArrayList<Task>();

        SQLiteDatabase db = getWritableDatabase();
        Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_ZADANIA, null);

        if (cursor.moveToFirst()) {
            do {
                tasks.add(new Task(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4)));
            }
            while (cursor.moveToNext());
        }
        cursor.close();
        db.close();
        return tasks;
    }
}

The problem is when you added a second task. The first has been added successfully, when you try to add another message appears:

Toast.makeText(getActivity().getApplicationContext(), String.valueOf(zadanieTxt.getText()) + " Zadanie już istnieje", Toast.LENGTH_SHORT).show();

Aucun commentaire:

Enregistrer un commentaire