Android Apps

Mobile App-Entwicklung

Java Kotlin Android SQLite

🚀 Interesse an diesem Projekt? Sprechen Sie mich an!

📞 02406 803 7603 ✉️ info@computerkumpel.de

💰 Business Value

Native Android-Apps mit modernem UI und lokaler SQLite-Datenbank — ToDo-App mit RecyclerView, Bottom Sheets und Swipe-Gesten. Basis für produktive Mobile-Anwendungen.

📱
Native Performance
Direkt in Java/Kotlin geschrieben — kein WebView, kein Cross-Plattform-Overhead. Volle Hardware-Nutzung.
🗄️
Offline-first
SQLite-Datenbank lokal auf dem Gerät — funktioniert komplett ohne Internetverbindung, keine Cloud-Abhängigkeit.
🎨
Material Design
Google Material Design Components — FloatingActionButton, Bottom Sheets, Swipe-Gesten — moderne UX out-of-the-box.
🔄
RecyclerView-Architektur
Moderne Listen-Darstellung mit RecyclerView + Adapter-Pattern — effizient, performant, erweiterbar.

⚙️ Funktionsweise

Die Kern-Mechanik des Projekts im Überblick.

1. Task erstellen
Per FAB-Tap öffnet sich ein Bottom Sheet — Task-Text eingeben und speichern. SOFORT in SQLite persistiert.
📋
2. Liste anzeigen
RecyclerView zeigt alle Tasks in umgekehrter Reihenfolge — neueste zuerst. Direkt aus SQLite geladen.
👈
3. Swipe-Interaktion
Links-Swipe = Löschen, Rechts-Swipe = Erledigt-Markierung — ItemTouchHelper für natürliche Gesten-Steuerung.
✏️
4. Bearbeiten
Task antippen → Bottom Sheet mit vorausgefülltem Text → Ändern → SQLite-Update → RecyclerView refreshed.

💻 Code-Einblicke

Ein Blick unter die Haube — so ist das Projekt technisch umgesetzt:

SQLite-Datenbank-Helper (Java)

public class DataBaseHelper extends SQLiteOpenHelper {
    private SQLiteDatabase db;
    private static final String DATABASE_NAME = "TODO_DATABASE";
    private static final String TABLE_NAME = "TODO_TABLE";
    private static final String COL_1 = "ID";
    private static final String COL_2 = "TASK";
    private static final String COL_3 = "STATUS";

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME 
            + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, "
            + "TASK TEXT, STATUS INTEGER)");
    }

    public void insertTask(ToDoModel model) {
        db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(COL_2, model.getTask());
        values.put(COL_3, 0);
        db.insert(TABLE_NAME, null, values);
    }

    public void updateStatus(int id, int status) {
        db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(COL_3, status);
        db.update(TABLE_NAME, values, "ID=?", 
            new String[]{String.valueOf(id)});
    }

    public void deleteTask(int id) {
        db = this.getWritableDatabase();
        db.delete(TABLE_NAME, "ID=?", 
            new String[]{String.valueOf(id)});
    }
}

MainActivity mit RecyclerView & FAB (Java)

public class MainActivity extends AppCompatActivity 
        implements OnDialogCloseListner {

    private RecyclerView mRecyclerview;
    private FloatingActionButton fab;
    private DataBaseHelper myDB;
    private List mList;
    private ToDoAdapter adapter;

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

        mRecyclerview = findViewById(R.id.recyclerview);
        fab = findViewById(R.id.fab);
        myDB = new DataBaseHelper(MainActivity.this);
        mList = new ArrayList<>();
        adapter = new ToDoAdapter(myDB, MainActivity.this);

        mRecyclerview.setHasFixedSize(true);
        mRecyclerview.setLayoutManager(new LinearLayoutManager(this));
        mRecyclerview.setAdapter(adapter);

        mList = myDB.getAllTasks();
        Collections.reverse(mList);
        adapter.setTasks(mList);

        fab.setOnClickListener(v -> 
            AddNewTask.newInstance().show(
                getSupportFragmentManager(), AddNewTask.TAG));
        
        ItemTouchHelper itemTouchHelper = new ItemTouchHelper(
            new RecyclerViewTouchHelper(adapter));
        itemTouchHelper.attachToRecyclerView(mRecyclerview);
    }
}

Bottom Sheet Dialog für Task-Eingabe (Java)

public class AddNewTask extends BottomSheetDialogFragment {
    private EditText mEditText;
    private Button mSaveButton;
    private DataBaseHelper myDb;

    @Override
    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
        mEditText = view.findViewById(R.id.edittext);
        mSaveButton = view.findViewById(R.id.button_save);
        myDb = new DataBaseHelper(getActivity());

        mEditText.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, 
                                      int before, int count) {
                if (s.toString().equals("")) {
                    mSaveButton.setEnabled(false);
                    mSaveButton.setBackgroundColor(Color.GRAY);
                } else {
                    mSaveButton.setEnabled(true);
                    mSaveButton.setBackgroundColor(
                        getResources().getColor(R.color.colorPrimary));
                }
            }
        });

        mSaveButton.setOnClickListener(v -> {
            String text = mEditText.getText().toString();
            ToDoModel item = new ToDoModel();
            item.setTask(text);
            item.setStatus(0);
            myDb.insertTask(item);
            dismiss();
        });
    }
}

⚡ In wenigen Tagen zum MVP — mit Vibecoding.

📞 02406 803 7603 ✉️ info@computerkumpel.de

🚀 Gebaut mit Vibecoding

👴 Klassische Entwicklung
  • 📋 2–3 Wochen Requirements
  • 🏗️ 2–3 Wochen Architektur
  • 💻 3–4 Wochen Implementierung
  • 🧪 1–2 Wochen Testing
  • ⏱️ Gesamt: 8–13 Wochen
🤖 Vibecoding-Ansatz
  • 🗣️ 0.5 Tage Prompt-Engineering
  • ⚡ 2–3 Tage iterative Generierung
  • 🔧 1–2 Tage Refinement
  • ✅ 1 Tag Testing & Deployment
  • ⏱️ Gesamt: 5–7 Tage

🎯 Strategische Erkenntnisse

Jedes Projekt liefert wertvolle Einsichten — technisch wie strategisch. Diese Learnings fließen direkt in Folgeprojekte ein.

🔒
Open Source = Unabhängigkeit
Offene Technologien bedeuten keine Vendor-Lock-ins, volle Kontrolle über den Code und langfristige Wartbarkeit ohne Lizenzkosten.
📈
Bottom-up statt Big Bang
Kleine, funktionierende Prototypen schlagen monatelange Planungsphasen. Erst beweisen, dann ausrollen — iterativ und risikominimiert.
🔄
Wiederverwendbarkeit
Modular aufgebauter Code beschleunigt Folgeprojekte massiv. Einmal gelöste Probleme werden zur Template-Bibliothek für zukünftige Herausforderungen.
🤖
KI als Beschleuniger
Vibecoding mit Coding-Agenten komprimiert Entwicklungszyklen von Wochen auf Tage — ohne Qualitätseinbußen durch iterative Prompt-Verfeinerung.

Bereit für Ihr nächstes Projekt?

Lassen Sie uns gemeinsam herausfinden, wo Automatisierung und KI den größten Hebel für Ihr Business haben — unverbindlich und pragmatisch.

🔍
Analyse & Konzept
Wir analysieren Ihre Anforderungen und skizzieren eine passgenaue Lösung — technisch fundiert und wirtschaftlich sinnvoll.
🧪
Proof-of-Concept
Ein funktionierender Prototyp innerhalb weniger Tage — Sie sehen das Ergebnis, bevor Sie sich committen.
🤝
Projektbegleitung
Von der Entwicklung über das Deployment bis zum Go-Live — ich begleite Sie durch den gesamten Prozess.
📞 02406 803 7603 ✉️ info@computerkumpel.de