ViewPostIme-Zeiger 1/0

Lesezeit: 8 Minuten

Benutzer-Avatar
Anais

Ich habe den folgenden Code ohne Kompilierungsfehler, der nur zu einer Endlosschleife führt … Ich verstehe nicht, wo das Problem liegt.

Wenn ich auf die Schaltfläche klicke, möchte ich ein Objekt mit den in den Bearbeitungstexten eingegebenen Werten erstellen und an eine andere Aktivität übergeben. Aber stattdessen bekomme ich eine Schleife.

Jeder Spinner wird mit einem String-Array aus Ressourcen/Strings gefüllt. Ich hatte hier etwas Schwierigkeiten die Werte zu bekommen, weil beim Spinner spTipUtilizator wenn “Profesor” ausgewählt ist, möchte ich spGrupa deaktiviert werden, und wenn “Student” ausgewählt ist, möchte ich spdept zu deaktivieren, aber auch das funktioniert nicht. Und basierend auf dieser Option wird die nächste Aktivität ausgewählt, die nach dem Klicken auf die Schaltfläche geöffnet wird.

Warum funktioniert es auch nicht, das Standarddatum in meinem Kalender festzulegen? Ich habe mehrere hier gefundene Dinge ausprobiert, aber keines davon hat bei mir funktioniert. Mein Android Studio wird nicht angezeigt DatePickerwas mir lieber wäre, nur dieser Kalender.

public class SignInActivity extends Activity {

    private Button bSignup;
    private EditText etNume, etPrenume, etUsername, etPassword, etConfirmPass, etEmail;
    private RadioButton rbMasc, rbFem;
    private Spinner spTipUtilizator, spgrupa, spdept;
    private ProgressBar progBar;
    private Calendar calendar;
    private int year, month, day, currentYear, defday, defmonth, defyear;
    private List<String> tipUtilizatorList, grupaList;
    private ArrayAdapter<String> spinnerArrayAdapterTipU;
    private String nume,prenume,username,password,password2,email,masc,fem,sex,tipUser,dept,DataN;
    private int grupa;


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

        calendar=Calendar.getInstance();
        calendar.set(1990,12,12);

        bSignup = findViewById(R.id.buttonSignin);
        etNume=findViewById(R.id.et_nume);
        etPrenume=findViewById(R.id.et_prenume);
        etUsername=findViewById(R.id.et_username);
        etPassword=findViewById(R.id.et_password);
        etConfirmPass = findViewById(R.id.et_confirmpassword);
        etEmail=findViewById(R.id.et_email);
        rbMasc=findViewById(R.id.radioButtonMasc);
        rbFem=findViewById(R.id.radioButtonFem);
        spTipUtilizator=findViewById(R.id.spinnerTipUtilizator);
        spgrupa=findViewById(R.id.spinnerGrupa);
        spdept=findViewById(R.id.spinnerDepartament);

        progBar = findViewById(R.id.progressBar);

        tipUtilizatorList=new ArrayList<>(Arrays.asList(getResources().getStringArray((R.array.tipUtilizator))));
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,tipUtilizatorList);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spTipUtilizator.setAdapter(adapter);

        grupaList = new ArrayList<>(Arrays.asList(getResources().getStringArray(R.array.grupa)));


        bSignup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                nume = etNume.getText().toString().trim();
                prenume = etPrenume.getText().toString().trim();
                username = etUsername.getText().toString().trim();
                password = etPassword.getText().toString().trim();
                password2 = etConfirmPass.getText().toString().trim();
                email = etEmail.getText().toString().trim();
                masc = rbMasc.getText().toString().trim();
                fem = rbFem.getText().toString().trim();
                sex=fem;
                tipUser = spTipUtilizator.getSelectedItem().toString().trim();
                grupa = Integer.parseInt(spgrupa.getSelectedItem().toString().trim());
                dept = spdept.getSelectedItem().toString().trim();
                DataN = day+"/"+month+"/"+year;

                progBar.setVisibility(View.VISIBLE);

                if(rbFem.isChecked()) {
                    sex=fem;
                }
                else if(rbMasc.isChecked()) {
                    sex=masc;
                }

               
                spTipUtilizator.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                        String Text = parent.getSelectedItem().toString();
                        if(Text.equals("Profesor")) {
                            spgrupa.getSelectedView().setEnabled(false);
                            spdept.getSelectedView().setEnabled(true);

                            Intent intent = new Intent(getApplicationContext(),StartProfesorActivity.class);
                            Profesor prof = new Profesor(nume,prenume,username,password,email,sex,dept,DataN);
                            intent.putExtra("profesor",prof);
                            startActivity(intent);
                            return;
                        }
                        else if(Text.equals("Student")) {
                            spgrupa.getSelectedView().setEnabled(true);
                            spdept.getSelectedView().setEnabled(false);

                            Intent intent = new Intent(getApplicationContext(),StartStudentActivity.class);
                            Student stud = new Student(nume,prenume,username,password,email,sex,grupa, DataN);
                            intent.putExtra("student",stud);
                            startActivity(intent);
                            return;
                        }

                    }

                    @Override
                    public void onNothingSelected(AdapterView<?> parent) {

                    }
                });

            }
        });
    }
}

Protokoll:

D/AbsListView:  in onLayout changed 
D/ViewRootImpl@cab402e[PopupWindow:ad4e773]: MSG_WINDOW_FOCUS_CHANGED 1
V/InputMethodManager: Not IME target window, ignoring
D/ViewRootImpl@cab402e[PopupWindow:ad4e773]: MSG_RESIZED_REPORT: frame=Rect(266, 72 - 422, 1047) ci=Rect(0, 0 - 0, 0) vi=Rect(0, 0 - 0, 0) or=1
D/ViewRootImpl@27d7010[SignInActivity]: MSG_WINDOW_FOCUS_CHANGED 0
D/ViewRootImpl@cab402e[PopupWindow:ad4e773]: ViewPostIme pointer 0
D/ViewRootImpl@cab402e[PopupWindow:ad4e773]: ViewPostIme pointer 1
D/AbsListView: onTouchUp() mTouchMode : 0
D/ViewRootImpl@cab402e[PopupWindow:ad4e773]: Relayout returned: old=[266,72][422,1047] new=[266,72][422,1047] result=0x1 surface={valid=true 481098420224} changed=false
D/ViewRootImpl@27d7010[SignInActivity]: MSG_WINDOW_FOCUS_CHANGED 1
D/ViewRootImpl@cab402e[PopupWindow:ad4e773]: MSG_WINDOW_FOCUS_CHANGED 0
I/zygote64: Compiler allocated 4MB to compile void android.view.View.<init>(android.content.Context, android.util.AttributeSet, int, int)
I/OpenGLRenderer: prepareTree mLayerUpdateQueue is not empty, size = 1
    name = PopupWindow$PopupBackgroundView, size (156, 975)
D/OpenGLRenderer: eglDestroySurface = 0x6ff4459d80
    endAllActiveAnimators on 0x6ff591ec00 (DropDownListView) with handle 0x7003b6eb00
D/ViewRootImpl@cab402e[PopupWindow:ad4e773]: dispatchDetachedFromWindow
D/InputEventReceiver: channel '468478f PopupWindow:ad4e773 (client)' ~ Disposing input event receiver.
    channel '468478f PopupWindow:ad4e773 (client)' ~NativeInputEventReceiver.
D/ViewRootImpl@27d7010[SignInActivity]: ViewPostIme pointer 0
D/ViewRootImpl@27d7010[SignInActivity]: ViewPostIme pointer 1
D/ViewRootImpl@27d7010[SignInActivity]: ViewPostIme pointer 0
D/ViewRootImpl@27d7010[SignInActivity]: ViewPostIme pointer 1
D/ViewRootImpl@27d7010[SignInActivity]: ViewPostIme pointer 0
D/ViewRootImpl@27d7010[SignInActivity]: ViewPostIme pointer 1
D/ViewRootImpl@27d7010[SignInActivity]: ViewPostIme pointer 0
D/ViewRootImpl@27d7010[SignInActivity]: ViewPostIme pointer 1
V/InputMethodManager: Starting input: tba=android.view.inputmethod.EditorInfo@54a19af nm : com.example.ancaa.proiectandroidquiz ic=com.android.internal.widget.EditableInputConnection@ba71bc
I/InputMethodManager: startInputInner - mService.startInputOrWindowGainedFocus
W/IInputConnectionWrapper: getCursorCapsMode on inactive InputConnection
W/IInputConnectionWrapper: getCursorCapsMode on inactive InputConnection
W/IInputConnectionWrapper: getSelectedText on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper: getTextAfterCursor on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
D/OpenGLRenderer: eglDestroySurface = 0x7003ab7400
D/ViewRootImpl@27d7010[SignInActivity]: Relayout returned: old=[0,0][1080,1920] new=[0,0][1080,1920] result=0x5 surface={valid=false 0} changed=true
D/ViewRootImpl@27d7010[SignInActivity]: MSG_WINDOW_FOCUS_CHANGED 0
D/ViewRootImpl@27d7010[SignInActivity]: Relayout returned: old=[0,0][1080,1920] new=[0,0][1080,1920] result=0x1 surface={valid=false 0} changed=false
Application terminated.

  • Haben Sie überlegt sich zu bewerben Extrahieren-Funktion refaktorisieren und dann alles einzeln in kleineren Stücken testen? Es wird Ihnen helfen, die Probleme zu lokalisieren.

    – Boris

    27. Februar 2020 um 17:00 Uhr


  • Wenn Sie sagen, es beginnt eine Schleife, was meinen Sie genau?

    – ChaseVsGodzilla

    20. August 2020 um 19:45 Uhr

  • Können Sie eine kleine funktionierende Anwendung mit diesem Problem erstellen, um dieses Problem zu reproduzieren?

    – Kelvin

    3. September 2020 um 8:59 Uhr

  • und warum definieren Sie den Listener “items selected” in der Methode “on click”?

    – Kelvin

    3. September 2020 um 9:02 Uhr

Benutzer-Avatar
João Paulo

Sie sollten die nicht erstellen OnItemSelectedListener innerhalb der OnClickListener für Ihre Anmeldeschaltfläche, müssen Sie sie stattdessen außerhalb erstellen und die ausgewählte Option in einer Variablen speichern.

Wenn der Benutzer dann auf Ihre Anmeldeschaltfläche klickt, überprüfen Sie, welche Option ausgewählt wurde, und starten die richtige Aktivität.

Wenn Sie sich Ihren Code ansehen, könnten Sie die Absicht einfach für die nächste Aktivität speichern und wenn der Benutzer auf die Schaltfläche klickt, starten Sie einfach die Aktivität auf dieser Absicht.

Ich habe eine Überprüfung auf Nichtigkeit vorgenommen, bevor ich versucht habe, diese Absicht zu starten, und Sie könnten dem Benutzer einen Dialog oder Toast zeigen, wenn keine gültige Option ausgewählt wurde.

public class SignInActivity extends Activity {

    private Button bSignup;
    private EditText etNume, etPrenume, etUsername, etPassword, etConfirmPass, etEmail;
    private RadioButton rbMasc, rbFem;
    private Spinner spTipUtilizator, spgrupa, spdept;
    private ProgressBar progBar;
    private Calendar calendar;
    private int year, month, day, currentYear, defday, defmonth, defyear;
    private List<String> tipUtilizatorList, grupaList;
    private ArrayAdapter<String> spinnerArrayAdapterTipU;
    private String nume,prenume,username,password,password2,email,masc,fem,sex,tipUser,dept,DataN;
    private int grupa;

    private Intent activityToStart;

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

        calendar=Calendar.getInstance();
        calendar.set(1990,12,12);

        bSignup = findViewById(R.id.buttonSignin);
        etNume=findViewById(R.id.et_nume);
        etPrenume=findViewById(R.id.et_prenume);
        etUsername=findViewById(R.id.et_username);
        etPassword=findViewById(R.id.et_password);
        etConfirmPass = findViewById(R.id.et_confirmpassword);
        etEmail=findViewById(R.id.et_email);
        rbMasc=findViewById(R.id.radioButtonMasc);
        rbFem=findViewById(R.id.radioButtonFem);
        spTipUtilizator=findViewById(R.id.spinnerTipUtilizator);
        spgrupa=findViewById(R.id.spinnerGrupa);
        spdept=findViewById(R.id.spinnerDepartament);

        progBar = findViewById(R.id.progressBar);

        tipUtilizatorList=new ArrayList<>(Arrays.asList(getResources().getStringArray((R.array.tipUtilizator))));
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,tipUtilizatorList);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spTipUtilizator.setAdapter(adapter);

        grupaList = new ArrayList<>(Arrays.asList(getResources().getStringArray(R.array.grupa)));


        bSignup.setOnClickListener(v -> {
            nume = etNume.getText().toString().trim();
            prenume = etPrenume.getText().toString().trim();
            username = etUsername.getText().toString().trim();
            password = etPassword.getText().toString().trim();
            password2 = etConfirmPass.getText().toString().trim();
            email = etEmail.getText().toString().trim();
            masc = rbMasc.getText().toString().trim();
            fem = rbFem.getText().toString().trim();
            sex=fem;
            tipUser = spTipUtilizator.getSelectedItem().toString().trim();
            grupa = Integer.parseInt(spgrupa.getSelectedItem().toString().trim());
            dept = spdept.getSelectedItem().toString().trim();
            DataN = day+"/"+month+"/"+year;

            progBar.setVisibility(View.VISIBLE);

            if(rbFem.isChecked()) {
                sex=fem;
            }
            else if(rbMasc.isChecked()) {
                sex=masc;
            }

            if(activityToStart != null)
                startActivity(activityToStart);

        });

        spTipUtilizator.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String Text = parent.getSelectedItem().toString();
                if(Text.equals("Profesor")) {
                    spgrupa.getSelectedView().setEnabled(false);
                    spdept.getSelectedView().setEnabled(true);

                    activityToStart = new Intent(getApplicationContext(),StartProfesorActivity.class);
                    Profesor prof = new Profesor(nume,prenume,username,password,email,sex,dept,DataN);
                    activityToStart.putExtra("profesor",prof);
                    return;
                }
                else if(Text.equals("Student")) {
                    spgrupa.getSelectedView().setEnabled(true);
                    spdept.getSelectedView().setEnabled(false);

                    activityToStart = new Intent(getApplicationContext(),StartStudentActivity.class);
                    Student stud = new Student(nume,prenume,username,password,email,sex,grupa, DataN);
                    activityToStart.putExtra("student",stud);
                    return;
                }

            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }
}

1093080cookie-checkViewPostIme-Zeiger 1/0

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy