簡體   English   中英

適用於Android Studio的Dynamic Spinner

[英]Dynamic Spinner for android studios

好的,我正在創建一個將使用2個微調器的android項目。 第一個是從狀態的穩定數組列表中設置的。 第二個將列出該州的學校列表。 學校列表存儲在SQL數據庫中,並由用戶添加到學校中。 因此,一旦我通過州的價值,我就可以得到學校名單。 唯一的事情是我似乎無法避免來自schoolList的空指針。 這是頁面的代碼。 任何想法都會有所幫助。

public class Register extends AppCompatActivity implements  View.OnClickListener {

Button bCancel, bRegister;
EditText etEmail, etPassword, etUserName;
Spinner stateList, schoolList;

//Scope variables strings
String uName=null,email=null,pass=null,school=null,state=null;

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


    bCancel = (Button) findViewById(R.id.bCancel);
    bRegister = (Button) findViewById(R.id.bRegister);
    etUserName = (EditText) findViewById(R.id.etUserName);
    etPassword = (EditText) findViewById(R.id.etPassword);
    etEmail = (EditText) findViewById(R.id.etEmail);
    stateList = (Spinner) findViewById(R.id.stateList);
    schoolList = (Spinner) findViewById(R.id.schoolList);

    setState();
    ArrayList<Object> defAda= new ArrayList<>();
    defAda.add("Select State First");
    ArrayAdapter schoollist = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_spinner_item, defAda);
    schoolList.setAdapter(schoollist);
    schoolList.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

        }

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

        }
}

    );

    stateList.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            stateList = (Spinner)parent;
            state=parent.getItemAtPosition(position).toString();
            if (state !=null) {
                setSchool(state);
                schoolList.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                        schoolList = (Spinner) parent;
                        school = parent.getItemAtPosition(position).toString();
                    }

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

                    }
                });
            }
        }

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

        }
    });

    bRegister.setOnClickListener(this);
    bCancel.setOnClickListener(this);
}
public void setState(){
    ArrayList<String> states=CCValueStore.getStatesList();
    ArrayAdapter stateslist = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_spinner_item, states);
    stateList.setAdapter(stateslist);
}

public void setSchool(String state){
    ArrayList<Object> schools;
    ServerRequests getSchool;
    getSchool = new ServerRequests(this);
    schools=getSchool.getSchoolUserBackground(state, new GotSchoolCallBacks() {

                @Override
                public ArrayList done(ArrayList<Object> returnedSchools) {
                    return returnedSchools;
                }
            });
    schools.add("Not Selected");
    ArrayAdapter schoollist = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_spinner_item, schools);
    schoolList.setAdapter(schoollist);
}
@Override
public void onStart(){

    super.onStart();
}

@Override
public void onStop() {
    super.onStop();

}

@Override
public void onClick(View v) {
    if (v.getId() == R.id.bCancel) {
        startActivity(new Intent(this, logIn.class));

    }
    if (v.getId() == R.id.bRegister) {
        uName = etUserName.getText().toString();
        pass = etPassword.getText().toString();
        email = etEmail.getText().toString();
        state = stateList.getSelectedItem().toString();
        school = schoolList.getSelectedItem().toString();

        CCuser UserData = new CCuser(uName, pass, email, state, school);
        boolean success = registerUser(UserData);
        if (success) {
            ServerRequests registered;
            registered = new ServerRequests(this);
            registered.storeUserDataBackground(UserData, new StoreUser() {
                @Override
                public void done(boolean isOk) {

                }
            });
            startActivity(new Intent(this, logIn.class));
        }
    }
}

public boolean registerUser(final CCuser userData) {
    boolean forward= Boolean.parseBoolean(null);
    final String[] chkE = new String[1]; final String[] chkN = new String[1];
    final ServerRequests chkUser = new ServerRequests(this);
    chkUser.fetchUserDataByName(userData, new CheckUserName() {

        @Override
        public void done(CCuser returnedUser) {
            chkN[0] = returnedUser.uName;

        }

    });
    chkUser.fetchUserDataByEmail(userData, new CheckUserEmail() {
        @Override
        public void done(CCuser returnedUser) {
            chkE[0] =returnedUser.email;

        }
    });
    if (chkN[0].equals(userData.uName))
    {
        AlertDialog.Builder notFound = new AlertDialog.Builder(Register.this);
        notFound.setMessage("User Name already exists");
        notFound.setPositiveButton("OK", null);
        notFound.show();
        forward=false;
    }
    else if (chkE[0].equals(userData.email)){
        AlertDialog.Builder notFound = new AlertDialog.Builder(Register.this);
        notFound.setMessage("That email is already assigned to a user");
        notFound.setPositiveButton("OK", null);
        notFound.show();
        forward = false;
    }
    else if (chkN[0].equals("") && chkE[0].equals("")) {
        forward = true;
    }
    return forward;
}

}

為什么不嘗試將數據加載到具有狀態(作為鍵)和相應學校列表作為該鍵的條目的statesSpinner.setOnItemSelectedListener() ,然后從statesSpinner.setOnItemSelectedListener()將正確的學校加載到新列表中並發送到SchoolsSpinnerAdapter。

我希望這能幫到您 :)

好的,問題出在我沒有張貼的東西上。 圍繞Web界面構建應用程序,我創建了一個身份驗證密鑰。 我在應用程序中命名了密鑰auth,並正在尋找appAuth進行檢索以獲得對我的Web服務器的訪問權限。 因此,空指針。 我在學校里遇到錯誤的原因僅僅是因為那是第一次訪問網絡。 一旦將發送的值與要檢索的值對齊,一切就順利進行了。

我還采用了另一種方法,創建了一個列表視圖而不是微調框,並且使用了零散數據,因為應用程序的其他部分也將使用相同的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM