Mehrer Elemente mit der selben Struktur aus SQLite

  • Antworten:17
  • Bentwortet
Alex
  • Forum-Beiträge: 28

05.05.2016, 18:34:20 via Website

Hallo Zusammen!
MEin Problem wird etwas komplizierter!
Und zwar folgendes: Ich habe eine SQLite Datenbank wo variablen drinnen stehen die ich alle folgendermaßen ausgeben will:

image

Nur meine Frage ist jetzt, wie sage ich der App das bei jeder neuen Zeile der SQLite Datenbank das genau immer nach dem gleichem Schema ausgegeben wird inkl.der Narrow down Button und allen Funktionen? Mit Methoden die einfach die Anzzahl und die Parameter übergeben bekommen, das habe ich geschafft aber wie sage ich dann das im XML Code eine Neue TextView ein weiter Narrow button usw. erstellt wird??
Danke und LG Alex

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.05.2016, 19:00:35 via App

Das geht nicht.
Du musst dir ein Beispiel Item machen und als XML speichern.
Dann hast du ein 2. Layout mit eine ListView wessen Items sich an dem beispiel orientieren.

Jetzt brauchst du nur noch einen passenden ListAdapter der dir die Daten aus der DB liest und sie in das passende Item füllt.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Alex
  • Forum-Beiträge: 28

05.05.2016, 19:03:28 via Website

Ok meine SQLite DB kann ich aber beibehalten?
Bis ListView ansonst so weit verstanden aber in wie fern meinst du Adapter???
Danke :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.05.2016, 19:06:11 via App

Für eine ListView brauchst du doch einen ListAdapter bzw. Cursor oder BaseAdapter etc...
Der muss dann die Daten lesen und in die View einsetzen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Alex

Antworten
Alex
  • Forum-Beiträge: 28

05.05.2016, 19:24:56 via Website

ok danke und noch eine ganz andere Frage: Bekomme hier einen android.os.NetworkOnMainThreadException

Toast.makeText(CheckForUpdateActivity.this, "Clicked", Toast.LENGTH_SHORT).show();
    String url = "hier kommt der URL rein!"; //kann den URL nicht drinnen lassen das Spam vermieden wird auf dieser WEbsite :/
    String newversion = null;

    try {
        URL filesFeed = new URL(url);

        InputStream input = filesFeed.openConnection().getInputStream();
        Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(input);

        Node latesFile = document.getElementsByTagName("item").item(0);
        NodeList children = latesFile.getChildNodes();

        newversion = children.item(1).getTextContent();

        if ("Beta_1.0" != newversion) {
            System.out.println("Updates Found! New Version: " + newversion);

        } else {
            System.out.println("Your App is up to date!");
        }
    }catch (Exception e) {
        if(e instanceof UnknownHostException) System.out.println("Checking for updates FAILED! - Please check your internet connection!");
        else {
            System.out.println("Checking for updates FAILED!" + e);
            e.printStackTrace();
        }
    }

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.05.2016, 20:42:35 via App

Jupp Laden von Daten aus dem Netzwerk/Internet müssen immer in einem externen Thread/AsyncTask gemacht werden oder du nimmst ne Lib wie okHttp oder Ion

— geändert am 05.05.2016, 20:42:43

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Alex
  • Forum-Beiträge: 28

05.05.2016, 21:58:02 via Website

Das heißt für mich als halber Anfänger was? ^^

Antworten
Alex
  • Forum-Beiträge: 28

05.05.2016, 21:59:00 via Website

Wieso eig einen Thread? Ich will es ja nicht ständig überprüfen!?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.05.2016, 22:01:08 via App

Das laden blokiert zu lange den UI Thread.
Deswegem muss das in einen Thread.
Mit callback lässt sich das auch verarbeiten

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Alex
  • Forum-Beiträge: 28

05.05.2016, 22:07:11 via Website

Wie kann ich den Thread dann stoppen?

public void ButtonCheckForUpdatesOnClicked(View view) {
    Toast.makeText(CheckForUpdateActivity.this, "Clicked", Toast.LENGTH_SHORT).show();
    try {
        checker.start();
    } catch (Exception e){
        System.out.println("Checker already running");
    }
@Override
public void onDestroy() {
    super.onDestroy();
    Debug.stopMethodTracing();
    checker.stop();     
}

}

public class UpdateChecker extends Thread {

@Override

public void run(){
     try {
        String url = "";
        String newversion = null;
        URL filesFeed = new URL(url);

        InputStream input = filesFeed.openConnection().getInputStream(); //absturz hier
        Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(input);

        Node latesFile = document.getElementsByTagName("item").item(0);
        NodeList children = latesFile.getChildNodes();

        newversion = children.item(1).getTextContent();

        if ("Beta_1.0" != newversion) {
            System.out.println("Updates Found! New Version: " + newversion);

        } else {
            System.out.println("Your App is up to date!");
        }
    } catch (Exception e) {
        if (e instanceof UnknownHostException)
            System.out.println("Checking for updates FAILED! - Please check your internet connection!");
        if (e instanceof MalformedURLException) System.out.println("MalformedURLException");
        if (e instanceof IOException) System.out.println("IOException");
        if (e instanceof ParserConfigurationException)
            System.out.println("ParserConfigurationException");
        if (e instanceof SAXException) System.out.println("SAXException");
        else {
            System.out.println("Checking for updates FAILED!" + e);
            e.printStackTrace();
        }
    }
}

}

— geändert am 05.05.2016, 22:40:56

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.05.2016, 06:18:25 via App

Mit Stop oder Abort

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Alex
  • Forum-Beiträge: 28

06.05.2016, 14:09:56 via Website

Das mit dem Stop funktioniert aber nicht... er streich es durch :/

public class CheckForUpdateActivity extends AppCompatActivity {

UpdateChecker checker = new UpdateChecker();
String url = "";


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

@Override
public void onDestroy() {
    super.onDestroy();
    Debug.stopMethodTracing();
    checker.stop();

}
@Override
public void onStop(){
    super.onStop();
    checker.stop();
}

public void ButtonCheckForUpdatesOnClicked(View view) {
    Toast.makeText(CheckForUpdateActivity.this, "Clicked", Toast.LENGTH_SHORT).show();
    try {
        checker.start();
    } catch (Exception e){
        System.out.println("Checker already running");
    }
}

}

Antworten
Alex
  • Forum-Beiträge: 28

10.05.2016, 16:18:11 via Website

Hallo nochmal eine Frage ich scheiter gerade an der stoppung eines Threads ^^ kann mir jemand sagen wie ich am Besten eine laufenden Thread stoppe?

public class Updater implements Runnable {
Thread thread;

public Updater(){
    thread = new Thread(this);
}

@Override
public void run(){

}

public void start(){
    this.thread.start();
}
public void stop(){
    this.thread.stop(); //Error
}

}

Wäre nett wenn mir jemand ein Codebeispiel zeigen könnte

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.05.2016, 17:15:54 via App

Was kommt denn für eine Exception wenn du stop benutzt?
Im moment ist klar das es nicht geht der Thread wird gestartet und beendet sich gleich wieder da es nichts zutun hat.
Du musst in die Run Methode zumindest ein Thread.Sleep machen.
Dann kannst du mir Abort abbrechen und mit Stop stoppen.

PS: Das nächste mal bitte nicht pushen ;)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Alex
  • Forum-Beiträge: 28

11.05.2016, 15:56:48 via Website

Das Funktioniert aber auch nicht....

image

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

11.05.2016, 16:05:25 via Website

Das ist kein Error, funktionieren wird es trotzdem.
Das ist nur der Hinweis, dass man die Methode nichtverwenden soll weil sie veraltet ist.

Wenn man dann danach sucht, ist es wohl besser de Thread managed zu beenden z.b.:
https://www.securecoding.cert.org/confluence/display/java/THI05-J.+Do+not+use+Thread.stop%28%29+to+terminate+threads
oder
http://www.forward.com.au/javaProgramming/HowToStopAThread.html
oder
http://stackoverflow.com/questions/8505707/android-best-and-safe-way-to-stop-thread

Welche jetzt davon die beste Lösung ist... keine Ahnung....

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Alex
  • Forum-Beiträge: 28

11.05.2016, 17:46:51 via Website

Nein da bekommt man leider einen Fehler :/
Hab mir die Seiten gerade angesehen ist aber alles immer mit Fehlern verbunden eine richtige Fehlerfreie Lösung gibt es irgendwie gar nicht ich google mal weiter :/

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

11.05.2016, 17:48:03 via Website

Eigentlich nicht, hab das selber schon so gemacht..
Was sind denn die Fehler?
Vielleicht kann ich helfen

— geändert am 11.05.2016, 17:48:16

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten