mercredi 6 avril 2016

Using SQLite with Fragments, a spinner and the webview

I want to use a SQLite DB where I can add a name and an IP from a Fragmentto the DB.

In the Fragment: Add_DDC I use an EditText field, where I type in the name which I want to show in the spinner, and an EditText field, where I type in the IP which I want to use for the WebView in the other Fragment.

My first problem is that, when I try to add a name and an IP to the DB, nothing will be showed in the spinner which is in the WebView Fragment.

The other problem is, that I don't know how I can, show the name in the spinner but let the WebView update the IP which was typed in with the name in the ADD_DD Fragment.

Here is my whole code, I hope you guys can help me out.

Database.class

package com.wietzorek.kevin.smartliving;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

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

public class Database {

/* Datenbanktyp festlegen */
private SQLiteDatabase db;

/* Datenbank erstellen */
public Database(Context ctx) {
    db = ctx.openOrCreateDatabase(
            "DDC_DB.db"
            , SQLiteDatabase.CREATE_IF_NECESSARY
            , null
    );

    /* Tabelle in Datenbank erstellen */
    final String CREATE_TABLE_data_information =
            "CREATE TABLE IF NOT EXISTS data_information ("
                    + "name VARCHAR,"
                    + "ip VARCHAR);";
    try {
        db.execSQL(CREATE_TABLE_data_information);
    } catch (Exception e) {
        Log.i("Fehler", e.getMessage());
    }
}

/* Funktion "Alle Informationen aus der Datenbank holen" */
public Cursor getData() {
    Cursor c = this.db.rawQuery("SELECT * FROM data_information ORDER BY _id DESC", null);
    return c;
}

/* Funktion: "Daten in die Datenbank schreiben" */
public void insertData(ContentValues values) throws Exception {
    try {
        this.db.insert("data_information", null, values);
    } catch (Exception e) {
        throw e;
    }
}

/* Funktion: "Daten aus der Datenbank löschen" */
public void deleteByName(String text) {
    this.db.delete("data_information", "name" + text, null);
}

/* Funktion: "Alle Daten aus der Spalte "Name" auslesen" */
public List<String> getAllNames() {
    List<String> names = new ArrayList<String>();

    String selectQuery = "SELECT name FROM data_information";

    Cursor cursor = db.rawQuery(selectQuery, null);

    if (cursor.moveToFirst()) {
        do {
            names.add(cursor.getString(0));
        } while (cursor.moveToNext());
    }

    return names;
}

/* Funktion: "Alle Daten aus der Spalte "IP" auslesen" */
public List<String> getAllIPs() {
    List<String> ip = new ArrayList<String>();

    String selectQuery = "SELECT ip FROM data_information";

    Cursor cursor = db.rawQuery(selectQuery, null);

    if (cursor.moveToFirst()) {
        do {
            ip.add(cursor.getString(0));
        } while (cursor.moveToNext());
    }

    return ip;
}
}

ADD_DDC Fragment

    package com.wietzorek.kevin.smartliving;


import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.ContentValues;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Add_DDC extends Fragment {

    /* Datenbank einbinden */
    private Database db;

    /* Anlegen der Variablen */
    Button btn_add, btn_delete, btn_back;
    EditText ddc_name, ddc_ip;

    public void onResume(){
        super.onResume();

        /* "ActionBar Title" festlegen */
        ((MainActivity) getActivity())
                .setActionBarTitle("DDC hinzufügen");
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        final View view = inflater.inflate(R.layout.add_ddc, container, false);

        db = new Database(getActivity());

        /* Eingabefelder zuweisen */
        ddc_name = (EditText) view.findViewById(R.id.edit_ddc_name);
        ddc_ip = (EditText) view.findViewById(R.id.edit_ddc_ip);

        final String new_ddc_name = ddc_name.getText().toString();
        final String new_ddc_ip = ddc_ip.getText().toString();

        /* Button "DDC HINZUFÜGEN" */
        btn_add = (Button) view.findViewById(R.id.btn_add);
        btn_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (ddc_name.getText().length() != 0 && ddc_ip.getText().length() != 0) {

                    /* Einfügen der eingebenen Texte in die Datenbank */
                    ContentValues values = new ContentValues();
                    values.put("name", new_ddc_name);
                    values.put("ip", "http//:" + new_ddc_ip);

                    try {
                        db.insertData(values);
                        Log.i("test", "data inserted");
                    }
                    catch(Exception e) {
                        Log.i("Fehler", e.getMessage());
                    }

                }
                else {

                    Toast.makeText(getActivity(), "Bitte DDC Name und DDC IP:Port eingeben",
                            Toast.LENGTH_LONG).show();

                }
            }

        });

        /* Button "DDC LÖSCHEN" */
        btn_delete = (Button) view.findViewById(R.id.btn_delete);
        btn_delete.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {

                if (ddc_name.getText().length() != 0) {

                    /* Löschen des eingebenen Namens aus der Datenbank */
                    db.deleteByName(new_ddc_name);

                }
                else {

                    Toast.makeText(getActivity(), "Bitte vorhandenen DDC Name eingeben",
                            Toast.LENGTH_LONG).show();

                }

            }

        });

        /* Button "Zurück" */
        btn_back = (Button) view.findViewById(R.id.btn_back);
        btn_back.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                /* Zurück zur Ansicht "Webview" */
                Fragment fr;

                fr = new Webview();

                FragmentManager fm = getFragmentManager();
                FragmentTransaction fragmentTransaction = fm.beginTransaction();
                fragmentTransaction.replace(R.id.fragment_place, fr);
                fragmentTransaction.commit();
            }
        });

        return view;

    }
}

WebView Fragment

 package com.wietzorek.kevin.smartliving;


import android.app.Fragment;
import android.content.res.Configuration;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;

import java.util.List;

public class Webview extends Fragment {

    /* Datenbank einbinden */
    private Database db;

    /* Anlegen der Variablen */
    WebView myWebView;
    Spinner ddc_spinner;
    ArrayAdapter dataAdapter;

    public void onResume(){
        super.onResume();

        /* "ActionBar Title" festlegen */
        ((MainActivity) getActivity())
                .setActionBarTitle("Start");

    }

    /* Neuladen der "WebView" Funktion verhindern
     * bei "Orientation change" (Portrait/Landscape) */
    @Override
    public void onConfigurationChanged(Configuration newConfig){
        super.onConfigurationChanged(newConfig);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.webview, container, false);

        db = new Database(getActivity());

        /* Dropdownmenü initialisieren */
        ddc_spinner = (Spinner) view.findViewById(R.id.ddc_spinner);

        List<String> names = db.getAllNames();

        dataAdapter = new ArrayAdapter<String>(this.getActivity(),
                android.R.layout.simple_spinner_item, names);

        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        ddc_spinner.setAdapter(dataAdapter);

        dataAdapter.notifyDataSetChanged();

        ddc_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
                String name = parent.getItemAtPosition(pos).toString();

                Toast.makeText(parent.getContext(), name,
                        Toast.LENGTH_LONG).show();

                /* Auswahl laden*/
                myWebView.loadUrl(name);
            }

            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

        /* WebView Einstellungen */
        myWebView = (WebView) view.findViewById(R.id.webView);
        myWebView.setVerticalScrollBarEnabled(true);
        myWebView.setHorizontalScrollBarEnabled(true);
        myWebView.setWebViewClient(new WebC());
        myWebView.getSettings().setDisplayZoomControls(true);
        myWebView.getSettings().setUseWideViewPort(true);
        myWebView.getSettings().setLoadWithOverviewMode(true);
        myWebView.getSettings().setSupportZoom(true);
        myWebView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
        myWebView.getSettings().setBuiltInZoomControls(true);
        myWebView.setInitialScale(0);
        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setDomStorageEnabled(true);

        return view;
    }


    /* WebView Client implementieren */
    public class WebC extends WebViewClient {

        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

            super.onReceivedError(view, errorCode, description, failingUrl);

        }
    }

}

Aucun commentaire:

Enregistrer un commentaire