Android Abfrage kommt verspätet

ATZENPOWER

Mitglied
hiho

ich bastel gerade an einer console und habe das problem, das die prüfung immer um 1 versetzt ist.

prüfe ich eingabe b nachdem ich eingabe a geprüft hatte, gibt er mir bei der ersten prüfen von b, den wert von a aus. erst bei der 2. prüfung gibt er mir den wert von b aus.

wo liegt mein fehler?


Java:
package org.world_hack.s1.app;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.util.Log;
import android.view.Gravity;
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.RelativeLayout;
import android.widget.SeekBar;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;

import org.json.JSONArray;
import org.json.JSONObject;

public class activity_console_copy  extends Fragment implements View.OnClickListener{

    View rootview;
    Fragment objFragment;
    CheckAttackLocalStore checkAttackLocalStore;
    ConsoleLocalStore consoleLocalStore;
    UserLocalStore userLocalStore;
    int uid;
    String usersecu, userid, statusmsg, neu, set;
    EditText input;
    LayoutInflater inflater;
    RelativeLayout relativeLayout;
    TableLayout ll;

    public static final int CONNECTION_TIMEOUT = 1000 * 30;
    public static final String SERVER_ADRESS = "http://world-hack.org";

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        rootview = inflater.inflate(R.layout.activity_console, container, false);
        relativeLayout = (RelativeLayout)rootview.findViewById(R.id.layout);
        input = null;

        Button btnSend = (Button)rootview.findViewById(R.id.btnSend);
        btnSend.setOnClickListener(this);

        AlertDialog.Builder dialogBuilders = new AlertDialog.Builder(getActivity());
        dialogBuilders.create();

        input = (EditText) rootview.findViewById(R.id.input);

        Console consolecheck= new Console(input.toString());
        fetchConsole(consolecheck);
        consoleLocalStore = new ConsoleLocalStore(getActivity());

        userLocalStore = new UserLocalStore(getActivity());
        User user = userLocalStore.getLoggedInUser();
        uid = user.uid;
        userid = Integer.toString(user.uid);
        usersecu = user.usersecu;

        checkAttackLocalStore = new CheckAttackLocalStore(getActivity());

        return rootview;
    }

    public void onClick(View v) {

        switch (v.getId()) {

            case R.id.btnSend:
                checkConsoleInput();
                displayConsoleDetails();
                input.setText("");
                break;
        }
    }

    private void fetchCheckAttacks(CheckAttack checkAttack){

        consoleLocalStore = new ConsoleLocalStore(getActivity());

        CheckAttackRequests checkAttackRequests = new CheckAttackRequests(getActivity());
        checkAttackRequests.fetchCheckAttackDataInBackground(checkAttack, new GetCheckAttackCallback() {

            @Override
            public void done(CheckAttack returnedCheckAttack) {
                if (returnedCheckAttack == null) {
                    showErrorMessage("Fehler beim laden der Daten");
                } else {
                    checkAttackLocalStore.storeCheckAttackData(returnedCheckAttack);
                }
            }
        });
    }

    public void checkConsoleInput() {

        consoleLocalStore = new ConsoleLocalStore(getActivity());
        Console sconsole = consoleLocalStore.getUserConsole();
        Console returnedConsole;

        String save_input = input.getText().toString();
        String check = sconsole.check;
        String sentence = (save_input.equals("") ? sconsole.newc : save_input );
        String search_check  = "check this" ;

       if (sentence.toLowerCase().indexOf(search_check.toLowerCase()) != -1 ){

            if(check.equals("") || check.equals(null) ) {

                    CheckAttack checkattack = new CheckAttack();

                    fetchCheckAttacks(checkattack);
                    checkAttackLocalStore = new CheckAttackLocalStore(this.getActivity());
                    CheckAttack checkAttack1 = checkAttackLocalStore.getUserCheckAttack();
                    String checkAttack2 = checkAttack1.checkAttack;
                    if(checkAttack2.equals("checked")) {
                        neu = "Check This \n" +
                                "Done";
                        check = "checked";
                    }else {
                        neu = "Check This \n" +
                                "Error: " + checkAttack2;
                        check = "";
                    }
                }
        }else {
            neu = "unbekannter Befehl";
            System.out.println("not found");
        }

        String output = (neu != null ? "{"+ neu + "}," : "");
        String oldoutputx = "["+output+"]";
        oldoutputx = oldoutputx.replace("},]", "},null]");
        oldoutputx = oldoutputx.replace("}]", "},null]");
        oldoutputx = oldoutputx.replace("},[{", "},{");
        oldoutputx = oldoutputx.replace("}[{", "},{");

        oldoutputx = oldoutputx.replace("{", "{\"output\":\"");
        oldoutputx = oldoutputx.replace("}", "\"}");
        oldoutputx = oldoutputx.replace(":\":", ":");
        oldoutputx = oldoutputx.replace("\"\"", "\"");

        String oldoutput = oldoutputx.replace("\"output\":\"\"output\"", "\"output\":\"");

        String old = oldoutput;

        returnedConsole = new Console(old, neu, check);

        consoleLocalStore.storeConsoleData(returnedConsole);
    }

    private void fetchConsole(Console console) {
        ConsoleRequests consoleRequests = new ConsoleRequests(getActivity());
        consoleRequests.fetchConsolesDataInBackground(console, new GetConsoleCallback() {

            @Override
            public void done(JSONArray returnedConsole) {
                if (returnedConsole == null) {
                    displayConsoleDetails();
                } else {
                    consoleLocalStore.storeConsoleData(returnedConsole);
                    displayConsoleDetails();
                }
            }
        }, set);
    }

    private void showErrorMessage(String text){
        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
        dialogBuilder.setMessage(text);
        dialogBuilder.setPositiveButton("OK", null);
        dialogBuilder.show();
    }

    private void displayConsoleDetails(){
        JSONArray jArray;

        consoleLocalStore = new ConsoleLocalStore(getActivity());
        Console sconsole = consoleLocalStore.getUserConsole();
        String daten = sconsole.output;
        Console consolex;

        try {
            jArray = new JSONArray(daten);

                for (int i = 0; i < jArray.length(); i++) {

                    JSONObject jObject = jArray.getJSONObject(i);

                    final String outputy = jObject.getString("output");

                    String startneuString = outputy.replace("[", "");
                    String outputx = startneuString.replace("]", "");

                    String oldz = sconsole.oldc;
                    oldz = oldz.replace("[", "");
                    oldz = oldz.replace("]", "");


                    String neu = outputx;

                    String old = oldz;

                    String check = sconsole.check;
                  
                    consolex = new Console(old, neu, outputx, check);

                    ll = (TableLayout) rootview.findViewById(R.id.displayLinear);
                    TableRow row = new TableRow(getActivity());

                    consoleLocalStore.storeConsoleData(consolex);

                    LayoutInflater inflater = getLayoutInflater(getArguments());
                    View theInflatedView = inflater.inflate(R.layout.activity_consolex,
                            null);

                    TextView attid = (TextView) theInflatedView.findViewById(R.id.output);
                    System.getProperty("line.separator");
                    attid.setText(String.valueOf(consolex.output));
                    attid = new TextView(getActivity());
                    row.addView(attid);

                    row.setGravity(Gravity.CENTER_HORIZONTAL);
                    row.addView(theInflatedView);

                    ll.addView(row, i);
                }
        } catch (org.json.JSONException e) {
            System.out.println(e);
        }
    }
}
 

BuckRogers

Bekanntes Mitglied
Hi,

leider schreibst du hier eine ungenügende Fehlerbeschreibung nieder und setzt dann eine recht große Klasse vor, welche nicht einmal mit deiner Fehlerbeschreibung in Verbindung zu bringen ist. Du musst schon mehr entgegenkommend sein, wenn man dir helfen soll.

Wenn wir ganz oben mal mit der Hilfestellung beginnen, fällt mir schon das auf:

public class activity_console_copy

Was könntest du denn hier ändern?
 

ATZENPOWER

Mitglied
ok... zum teil magst du sicher recht haben...

zum code: dieser code ist eine verkürzte version (deswegen als copy bezeichnet) von dem eigentlichem code. es handelt sich im grunde nur noch um die eigentliche funktion, die den fehler verursacht.
eine fehlermeldung gibt es nicht, da es ja zu keinem fehler des systems kommt.
ich möchte eine eingabe überprüfen, welche via serververbindung informationen abruft und dann via equals vergleicht ob der wert richtig gesetzt wurde, um dann einen entsprechenden text auszugeben.
jedoch vergleicht er nicht den wert den man aktuell eingibt, sondern den wert, den man zuvor eingegeben hat.
also: text eingeben, text wird geprüft und eine serverabfrage wird ausgeführt. diese gibt eine antwort zurück, die ausgewertet wird um anschiessend einen entsprechenden text auszugeben.
die ausgabe wird jedoch nicht aktuell behandelt, sondern erst mit einer weiteren prüfung.
gebe ich also zuerst einen falschen wert ein, wird dieser geprüft jedoch nicht angezeigt. prüfe ich nochmal, wird der richtige wert angezeigt.
setze ich einen weiteren wert, wird mir die ausgabe der letzten prüfung angezeigt und nicht den der letzten eingabe.

ich hoffe mein problem nun etwas verständlicher beschrieben zu haben
 

BuckRogers

Bekanntes Mitglied
Gut,

also noch einmal.

1. Es geht hier nicht um Recht.

2. Du möchtest doch sicherlich dass man dir hilft. Wieso erklärst du dann nicht etwas spezifischer wo genau das Problem liegt? Dein neuer Post trägt auch nicht wesentlich zum Verständnis bei.

ich möchte eine eingabe überprüfen
- ich nehme mal an das macht die Methode
Java:
public void checkConsoleInput();
?

welche via serververbindung informationen abruft
Welche Methode macht das? Welche Stelle?

jedoch vergleicht er nicht den wert den man aktuell eingibt
Wo findet der Vergleich statt?

sondern den wert, den man zuvor eingegeben hat
Wo wird der vorige Wert bezogen?

diese gibt eine antwort zurück
Wo wird die Antwort zurück gegeben?

die ausgabe wird jedoch nicht aktuell behandelt, sondern erst mit einer weiteren prüfung.
Wie hast du das festgestellt?

Wenn du meinst 'Wert': Was ist genau Wert? Welche Variable meinst du? Und wo wird dieser 'Wert' verwendet?

Weißt du, es ist relativ zeitaufwändig sich in einen Block Code einzulesen mit wenig Information dazu und überhaupt gar keiner Dokumentation. Wenn dann noch eine halbherzige Fehlerbeschreibung dazu kommt in der nicht einmal auf Großschreibung geachtet wird, dann ist es echt schwer sich zu motivieren, da man sogar die Sätze zweimal lesen muss.

Nachtrag: Zeilennummern machen sich bei längeren CodeBlocks recht gut. Daran kann man gut erklären. Auch Inline-Kommentare oder Methodenkommentare tragen zum Verständnis bei.
 

ATZENPOWER

Mitglied
Es ging mir nicht ums recht, sondern wollte dir nur zum Teil zustimmen... aber selbst das scheint ja fehlerhaft zu sein.... was den Code angeht sollte dieser selbst für hobbyprogrammierer ersichtlich sein... und wie bereits erwähnt ist der Codes gekürzt, was bedeutet das nicht relevante Elemente entfernt wurden.und was nen localstore und wie nen fetch funktioniert werd ich wohl kaum erleutern müssen oder?
und kommentare werden auf anderen Seiten entfernt oder führen zu problemen.... demnach hab ich sie rausgenommen....
zumal auch der Code gekürzt wurde um meinen Code nicht komplett offen zu legen.



und auch der fehler ist nicht unverständlich erklärt. jedoch scheinen einige nicht das zu verstehen was andere sagen möchten... stattdessen wird dann lieber über Banalitäten wie gross und Kleinschreibung gemeckert...
wenn du mir nicht helfen kannst weil du es nicht verstehst dann lass doch die Kommentare sein.
danke...
 

BuckRogers

Bekanntes Mitglied
Tut mir Leid wenn du das so siehst. Aber anstatt mir da entgegenzukommen fühlst du dich angegriffen?

aber selbst das scheint ja fehlerhaft zu sein....
Werden wir jetzt sarkastisch?

und was nen localstore und wie nen fetch funktioniert werd ich wohl kaum erleutern müssen oder?
NE, habe ich auch nicht nach gefragt....

und kommentare werden auf anderen Seiten entfernt oder führen zu problemen.... demnach hab ich sie rausgenommen....
Sie sind u.U. durchaus hilfreich.

zumal auch der Code gekürzt wurde um meinen Code nicht komplett offen zu legen.
Vor was hast du Angst? Das jemand deine Idee klaut? :eek:

stattdessen wird dann lieber über Banalitäten wie gross und Kleinschreibung gemeckert...
Sorry das sind die Basics... wer die nicht drauf hat ... Ebenso das Klassennamen-Naming... aber egal.

wenn du mir nicht helfen kannst weil du es nicht verstehst dann lass doch die Kommentare sein.
Du erwartest wohl dass sich jetzt jemand 5 Minuten Zeit nimmt und mit der Information die du bietest dir eine Top-Antwort hinblättert mit der du den Fehler sofort beheben kannst?
Anstatt auf die klitzkleinen Forderungen, welche nichtmal unbegründet sind, einzugehen, fühlst du dich auf den Schlips getreten. Das verstehe ich nicht. Wenn dein Thema so verständlich ist, verstehe ich nicht wieso ich bisher der Einzige bin der hier schreibt. Ich würde dir sehr gern helfen. Leider ist mir persönlich dein Entgegenkommen zu gering und ich habe mir noch nicht wirklich Zeit genommen zu verstehen was dein Code ganz genau macht, da mir grad die Zeit fehlt. Daher hab ich mir eine genauere Erklärung gewünscht.
 

T_T

Bekanntes Mitglied
Also ich muss da @BuckRogers recht geben. Ich habe deinen Fehler angeschaut und wurde direkt von deinem Quellcode überschüttet. Ich habe nach kurzem einlesen die Lust daran verloren, weil es echt nicht übersichtlich ist. Und es ist sicherlich kein Angriff, nur muss man sich gegenseitig die Hand reichen. Dir mag das alles verständlich sein (du hast es auch programmiert) aber ein Außenstehender muss sich echt erst mal die Mühe machen, diesen Code zu verstehen.

Lg
T_T
 

BuckRogers

Bekanntes Mitglied
@T_T Danke! Ich dachte schon ich bin alleine und übertreibe voll. Eventuell habe ich mich nicht freundlich ausgedrückt. Dann tut es mir Leid.

Grüße
 

ATZENPOWER

Mitglied
alles ist gut.... hab den fehler behoben bekommen....

und ja der quellcode ist sicher nicht für jeden sofort ersichtlich.... aber das ist zum teil auch gewollt...

jetzt steh ich ja vor nem ganz anderen problem.... mal gucken wie ich das gelöst bekomme....
 

mrBrown

Super-Moderator
Mitarbeiter
Wenn gewollt, lässt man am Ende nen Obfuscator drüberlaufen, aber schreibt keine Code, den niemand versteht, der deswegen nur Fehler provoziert und absolut unwartbar ist.
 

ATZENPOWER

Mitglied
ähm.... ich hatte aber erwähnt, das der code den ich gepostet hatte, zb gekürzt ist und das ich die kommentare herausgenommen habe, da diese zb bei SOF zu problemem führen, wenn man code einfügen möchte... ich hatte halt nur den relevanten teil gepostet
 

Ähnliche Java Themen

Neue Themen


Oben