ViewPostIme指针1/0

Ana*_*ais 16 java android loops spinner

我有以下代码,没有编译错误,只是导致无限循环...我不明白问题出在哪里。

当我单击按钮时,我想使用在编辑文本中输入的值创建一个对象,并将它们传递给另一个活动。但是相反,我得到了一个循环。

使用资源/字符串中的字符串数组填充每个微调器。我在这里获取值有些困难,因为在微调器spTipUtilizator上,当选择“ Profesor”时,我希望禁用spGrupa,而在选择“ Student”时,我要禁用spdept,但这也没有工作。然后将基于该选项选择单击按钮后将打开的下一个活动。

另外,为什么在日历中设置默认日期不起作用?我尝试了在这里找到的多种方法,但是没有一种对我有用。我的Android Studio不显示DatePicker,我更喜欢仅显示日历。

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) {

                    }
                });

            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

日志:

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.
Run Code Online (Sandbox Code Playgroud)

小智 1

您不应该在登录按钮OnItemSelectedListener内部创建它,而必须在外部创建它并将所选选项保存在变量中。OnClickListener

然后,当用户单击您的登录按钮时,您检查是否选择了女巫选项并启动正确的Activity

查看您的代码,您可以简单地将意图保存到下一个活动,并且当用户单击按钮时,只需启动该意图的活动

在尝试启动该意图之前,我已经检查了无效性,如果未选择有效选项,您可以向用户显示一些对话框或 Toast。

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) {

            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)