Checkbox 'terms' für Registration

  • Antworten:16
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 5

22.08.2018, 17:10:57 via Website

Hallo Community,

Folgendes meine RegisterActivity.java sieht derzeit folgendermaßen aus:

package xxx;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;

import org.json.JSONException;
import org.json.JSONObject;

public class RegisterActivity extends AppCompatActivity {
private static final String KEY_STATUS = "status";
private static final String KEY_MESSAGE = "message";
private static final String KEY_FULL_NAME = "full_name";
private static final String KEY_USERNAME = "username";
private static final String KEY_PASSWORD = "password";
private static final String KEY_EMPTY = "";
private EditText etUsername;
private EditText etPassword;
private EditText etConfirmPassword;
private EditText etFullName;
private String username;
private String password;
private String confirmPassword;
private String fullName;
private ProgressDialog pDialog;
private String register_url = "xxx";
private SessionHandler session;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    session = new SessionHandler(getApplicationContext());
    setContentView(R.layout.activity_register);

    etUsername = findViewById(R.id.etUsername);
    etPassword = findViewById(R.id.etPassword);
    etConfirmPassword = findViewById(R.id.etConfirmPassword);
    etFullName = findViewById(R.id.etFullName);

    Button login = findViewById(R.id.btnRegisterLogin);
    Button register = findViewById(R.id.btnRegister);

    //Launch Login screen when Login Button is clicked
    login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(RegisterActivity.this, LoginActivity.class);
            startActivity(i);
            finish();
        }
    });

    register.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //Retrieve the data entered in the edit texts
            username = etUsername.getText().toString().toLowerCase().trim();
            password = etPassword.getText().toString().trim();
            confirmPassword = etConfirmPassword.getText().toString().trim();
            fullName = etFullName.getText().toString().trim();
            if (validateInputs()) {
                registerUser();
            }

        }
    });

}

/**
 * Display Progress bar while registering
 */
private void displayLoader() {
    pDialog = new ProgressDialog(RegisterActivity.this);
    pDialog.setMessage("Registriere.. Bitte warte...");
    pDialog.setIndeterminate(false);
    pDialog.setCancelable(false);
    pDialog.show();

}

/**
 * Launch Dashboard Activity on Successful Sign Up
 */
private void loadDashboard() {
    Intent i = new Intent(getApplicationContext(), DashboardActivity.class);
    startActivity(i);
    finish();

}

private void registerUser() {
    displayLoader();
    JSONObject request = new JSONObject();
    try {
        //Populate the request parameters
        request.put(KEY_USERNAME, username);
        request.put(KEY_PASSWORD, password);
        request.put(KEY_FULL_NAME, fullName);

    } catch (JSONException e) {
        e.printStackTrace();
    }
    JsonObjectRequest jsArrayRequest = new JsonObjectRequest
            (Request.Method.POST, register_url, request, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    pDialog.dismiss();
                    try {
                        //Check if user got registered successfully
                        if (response.getInt(KEY_STATUS) == 0) {
                            //Set the user session
                            session.loginUser(username,fullName);
                            loadDashboard();

                        }else if(response.getInt(KEY_STATUS) == 1){
                            //Display error message if username is already existsing
                            etUsername.setError("Username bereits vergeben!");
                            etUsername.requestFocus();

                        }else{
                            Toast.makeText(getApplicationContext(),
                                    response.getString(KEY_MESSAGE), Toast.LENGTH_SHORT).show();

                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    pDialog.dismiss();

                    //Display error message whenever an error occurs
                    Toast.makeText(getApplicationContext(),
                            error.getMessage(), Toast.LENGTH_SHORT).show();

                }
            });

    // Access the RequestQueue through your singleton class.
    MySingleton.getInstance(this).addToRequestQueue(jsArrayRequest);
}

/**
 * Validates inputs and shows error if any
 * @return
 */
private boolean validateInputs() {
    if (KEY_EMPTY.equals(fullName)) {
        etFullName.setError("Name darf nicht leer bleiben");
        etFullName.requestFocus();
        return false;

    }
    if (KEY_EMPTY.equals(username)) {
        etUsername.setError("Username darf nicht leer bleiben");
        etUsername.requestFocus();
        return false;
    }
    if (KEY_EMPTY.equals(password)) {
        etPassword.setError("Passwort darf nicht leer bleiben");
        etPassword.requestFocus();
        return false;
    }

    if (KEY_EMPTY.equals(confirmPassword)) {
        etConfirmPassword.setError("Passwortbestätigung darf nicht leer bleiben");
        etConfirmPassword.requestFocus();
        return false;
    }
    if (!password.equals(confirmPassword)) {
        etConfirmPassword.setError("Passwort ist nicht identisch");
        etConfirmPassword.requestFocus();
        return false;
    }

    return true;
}

}

Nun ist es so das ich gern noch eine Checkbox für die "term" einbinden will.
Das hinzufügen in der register.xml ist nicht das eigentliche Problem, sondern das user sich nur regstrieren können wenn Sie die checkbox angeklickt haben und damit einverstanden sind.

Hat jemand Rat wie ich das ganze umsetzten kann?
Bin noch recht neu auf den Gebiet, daher nimmt es mir nicht ganz übel für die frage. :-)

Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.174

22.08.2018, 17:23:49 via App

Hallo Nico,

Herzlich willkommen hier im Forum :)

Zuerst musst du dir über findViewById die Instanz der CheckBox vom View holen, wie du es bei den Buttons etc. such gemacht hast.
Dann kannst du in der checkInputs überprüfen ob der Haken gesetzt ist oder nicht, das geht via checked() Methode die dir eine Boolean liefert.

— geändert am 22.08.2018, 17:23:56

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

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 5

22.08.2018, 19:48:14 via Website

Danke Pascal für die schnelle Antwort.

habe das jetzt so erstmal

    CheckBox checkBox = findViewById(R.id.cb1);
    if (checkBox.isChecked()) {
        checkBox.setChecked(false);

Leider bringt mir das noch nicht das gewünschte Ergebnis.

Evtl. könnte du mir nochmal helfen? :D

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 5

22.08.2018, 20:09:23 via Website

Huhu @jockel

Wenn Benutzer sich Registrieren, dann müssen sie unten die Checkbox anklicken (Eula und co.) um die Registrierung abzuschließen. Sollten sie die Checkbox nicht anklicken, erfolgt somit auch keine Registrierung - da sie nicht damit einverstanden sind.

LG.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 2.902

22.08.2018, 20:12:38 via Website

Schau mal ganz genau deine Zeilen an , dann kommst du schon selbst dahinter:

Du verarbeitest gar nicht den Status der Checkbox sondern setzt ihn wieder zurück.
Die Zeilen machen gar nichts Sinnvolles , deshalb hat jokel zurecht mal nachgefragt.

Wenn die Tür auf ist, dann mach die Tür zu .

Aber du möchtest ja wissen, ob die Tür auf ist und vor allem bleibt .

— geändert am 22.08.2018, 20:21:53

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 483

22.08.2018, 20:24:40 via Website

Ja genau. Also du fragst Ja die checkbox mit if ab also fürst du in der Klammer den Code aus der bei geklickter Box passieren soll, und im else Zweig gibst du dem User eine Info das er die Box anklicken soll.

Hilfreich?
Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.174

22.08.2018, 22:23:47 via Website

So bei bei den anderen auch:

if (!checkBox.isChecked()) { // Wenn nicht gecheckt
checkBox.setError("AGB etc. muss bestätigt werden");
checkBox.requestFocus();
return false;
}

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

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 5

23.08.2018, 16:07:48 via Website

Hallo und vielen dank erstmal für die Hilfe.
Leider steh ich etwas auf den Schlauch und komm einfach nicht weiter.
Der Code sieht derzeit folgendermaßen aus:

pastebin .com/AxvKzEga

Leider führt dies noch immer nicht zum gewünschten Ergebnis.
die Methoden isChecked, setError und requestFocus können laut android studio nicht ausgeführt werden.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 483

23.08.2018, 16:52:50 via Website

Leider ist kein Code zu sehen. Wenn das ein link sein soll da ist auch nichts.

Aber eigentlich solltest du das selber lösen können. Wenn du die chackbox abfragt , ist das doch nichts anderes als ob du eine Variable mit if prüfst.
Eine einfache if Strucktur solltest du schon können.

— geändert am 23.08.2018, 16:56:50

Hilfreich?
Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.174

23.08.2018, 16:57:55 via App

Zeile 32 legst du eine neue CheckBox variable mit Namen checkBox an und eigentlich willst du das der in der Klasse definierten Var. zuweisen. Da musd der Typ weg.

d.h. nur

checkBox = ...;

Und stimmen alle anderen Eingaben? Die Box wird nur überprüft wenn nirgends anders ein Fehler ist oder das Feld leer ..

— geändert am 23.08.2018, 16:58:57

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

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 483

23.08.2018, 17:05:41 via Website

Hi @Pascal P. wie ist den der richtige Link zu seinem Code.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 2.902

23.08.2018, 17:12:36 via Website

@Jokel,

mach das Leerzeichen im link weg

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 483

23.08.2018, 17:24:26 via Website

Danke Saw00
also die Variable "checkBox" ist ein mal eine lokale in der onCreate erstellte Variable vom Typ Checkbox , und ein weiteres mal global im KlassenRumf vom Typ String.

Wenn du nun in Zeile 175 mit if prüfst wird auf die globale Strring Variable zugegriffen.

Benutze zwei verschiedene Namen und mache die Checkbox Variable auch zu einer Klassen Variablen.

— geändert am 23.08.2018, 17:27:37

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 5

23.08.2018, 17:29:00 via Website

Hallo und danke euch hab das Problem jetzt folgendermaßen gelöst.

private static CheckBox agb;
    agb = (CheckBox) findViewById(R.id.cb1);

    if (!tagb.isChecked()) {
        agb.setError("AGB müssen bestätigt werden");
        agb.requestFocus();
        return false;
    }

Vielen lieben dank nochmal für die kleinen Denkanstöße.
Weiß auch nicht warum ich mich da etwas zu blöd angestellt habe :D
Naja jedenfalls funktioniert es nun!

LG.

Hilfreich?
Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.174

23.08.2018, 17:30:51 via Website

Das static kannst und solltest du dir in diesem Zusammenhang sparen. Beschert nur unangenehme Nebeneffekte wenn du nicht aufpasst...

— geändert am 23.08.2018, 17:40:36

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

Hilfreich?
Diskutiere mit!

Empfohlene Artikel