Java 设置位置前检查微调器的选择
我想知道在将位置设置为该值/选择之前,是否可以检查微调器是否包含值/选择。我所做的是,客户可以选择产品,例如:红色、黄色、绿色。当他们做出选择时,它会记录在我的数据库中。当客户加载要编辑的项目时,我需要将微调器位置设置为该选择。我可以毫无问题地做到这一点。问题是,如果他们重新登录并且购物车在一周后重新填充,则选项可能不再可用,因此我需要确保在选择之前该选项仍然可用。我试着检查ArrayList,这是我认为我需要做的,但我不完全确定。我确实尝试过,但它使应用程序崩溃。有什么想法吗?提前谢谢。下面是我的代码 加载所选选项:Java 设置位置前检查微调器的选择,java,android,spinner,Java,Android,Spinner,我想知道在将位置设置为该值/选择之前,是否可以检查微调器是否包含值/选择。我所做的是,客户可以选择产品,例如:红色、黄色、绿色。当他们做出选择时,它会记录在我的数据库中。当客户加载要编辑的项目时,我需要将微调器位置设置为该选择。我可以毫无问题地做到这一点。问题是,如果他们重新登录并且购物车在一周后重新填充,则选项可能不再可用,因此我需要确保在选择之前该选项仍然可用。我试着检查ArrayList,这是我认为我需要做的,但我不完全确定。我确实尝试过,但它使应用程序崩溃。有什么想法吗?提前谢谢。下面是
ArrayAdapter<String> spinnerOpt1;
ArrayAdapter<String> spinnerOpt2;
ArrayAdapter<String> spinnerOpt3;
class LoadSelectedOptions extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
Log.d("CONFIRM SPIN STAT 1::", Integer.toString(SpinStat1));
if(SpinStat1==1){
Log.d("SPINSTAT1", Integer.toString(SpinStat1));
List<NameValuePair> Options = new ArrayList<NameValuePair>();
Options.add(new BasicNameValuePair(DO_FUNCTION, SEL_OPT_FUNCTION1));
Options.add(new BasicNameValuePair(SEL_ITEM_COUNT, theProduct_Number));
JSONObject json = jParser.makeHttpRequest(master_url, "GET", Options);
Log.d("SPINSTAT1", json.toString());
try{
sel_success1 = json.getInt(SEL_SUCCESS1);
JSONArray selected_1 = json.getJSONArray(OPT_CATAGORIES);
if (sel_success1 == 1) {
for (int i = 0; i < selected_1.length(); i++) {
JSONObject c = selected_1.getJSONObject(i);
sel_opt1 = c.getString(SEL_OPT1);
}
}else {
}
}catch (JSONException e) {
e.printStackTrace();
}
}
if(SpinStat2==1){
List<NameValuePair> Options2 = new ArrayList<NameValuePair>();
Options2.add(new BasicNameValuePair(DO_FUNCTION, SEL_OPT_FUNCTION2));
Options2.add(new BasicNameValuePair(SEL_ITEM_COUNT, theProduct_Number));
JSONObject json2 = jParser.makeHttpRequest(master_url, "GET", Options2);
try{
sel_success2 = json2.getInt(SEL_SUCCESS2);
JSONArray selected_2 = json2.getJSONArray(OPT_CATAGORIES);
if (sel_success2 == 1) {
for (int i = 0; i < selected_2.length(); i++) {
JSONObject c = selected_2.getJSONObject(i);
sel_opt2 = c.getString(SEL_OPT2);
}
}else {
}
}catch (JSONException e) {
e.printStackTrace();
}
}
if(SpinStat3==1){
List<NameValuePair> Options3 = new ArrayList<NameValuePair>();
Options3.add(new BasicNameValuePair(DO_FUNCTION, SEL_OPT_FUNCTION3));
Options3.add(new BasicNameValuePair(SEL_ITEM_COUNT, theProduct_Number));
JSONObject json3 = jParser.makeHttpRequest(master_url, "GET", Options3);
try{
sel_success3 = json3.getInt(SEL_SUCCESS3);
JSONArray selected_3 = json3.getJSONArray(OPT_CATAGORIES);
if (sel_success3 == 1) {
for (int i = 0; i < selected_3.length(); i++) {
JSONObject c = selected_3.getJSONObject(i);
sel_opt3 = c.getString(SEL_OPT3);
}
}else {
}
}catch (JSONException e) {
e.printStackTrace();
}
}
return null;
}
protected void onPostExecute(String file_url) {
// dismiss the dialog after getting all products
runOnUiThread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
//SpinStat is a value determining if there are options. 0==No Options 1==Options Are Available
if(SpinStat1==1){
//spinnerOpt1 is the ArrayAdapter for that specific spinner. It is loaded from a List/ArrayList "options1"
}else if(spinnerOpt1.equals(sel_opt1)){
Spinner1.setSelection(spinnerOpt1.getPosition(sel_opt1));
}
if(SpinStat2==1){
}else if(spinnerOpt2.equals(sel_opt2)){
Spinner2.setSelection(spinnerOpt2.getPosition(sel_opt2));
}
if(SpinStat3==1){
}else if(spinnerOpt3.equals(sel_opt3)){
Spinner3.setSelection(spinnerOpt3.getPosition(sel_opt3));
}
}
});
}
}
将选项加载到微调器::
class LoadOptions1 extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
* */
@Override
/**
* getting All products from url
* */
protected String doInBackground(String... args) {
try {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair(DO_FUNCTION, OPT_FUNCTION));
params.add(new BasicNameValuePair("PROD_ID", GET_PID));
// getting JSON string from URL
Log.d("PROD_ID", GET_PID);
Log.d("DO_FUNCTION", OPT_FUNCTION);
Log.d("master_url", master_url);
JSONObject json = jParser.makeHttpRequest(master_url, "GET", params);
// Check your log cat for JSON reponse
Log.d("All Options: ", json.toString());
// Checking for SUCCESS TAG
success2 = json.getInt(OPT_SUCCESS);
Log.d("success2", Integer.toString(success2));
if (success2 == 1) {
// products found
// Getting Array of Products
JSONArray catagories = json.getJSONArray(OPT_CATAGORIES);
// looping through All Products
for (int i = 0; i < catagories.length(); i++) {
JSONObject c = catagories.getJSONObject(i);
// Storing each json item in variable
String category = c.getString(OPT_CATAGORY);
options1.add(category);
}
} else {
// no products found
// Launch Add New product Activity
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog after getting all products
if (!(success2 == 0)) {
SpinStat1 = 1;
Log.d("SET SPIN STAT 1::", Integer.toString(SpinStat1));
spinnerOpt1 = new ArrayAdapter<String>(EditCart.this, android.R.layout.simple_list_item_1, options1);
Spinner1.setAdapter(spinnerOpt1);
// MySpinner.setSelection(spinnerMenu.getPosition("Select A Catagory"));
}else{
textView8.setVisibility(View.GONE);
Spinner1.setVisibility(View.GONE);
SpinStat1 = 0;
}
}
}
哦,我明白问题所在了。您的
ArrayAdapter
s为null
。你从不初始化它们
ArrayAdapter<String> spinnerOpt1;
ArrayAdapter<String> spinnerOpt2;
ArrayAdapter<String> spinnerOpt3;
ArrayAdapter喷丝头opt1;
阵列自适应喷丝头OPT2;
阵列适配喷丝头OPT3;
在onPostExecute()中使用它们之前,您需要在某处初始化它们
这是假设第689行是else if(spinnerOpt1.equals(sel_opt1))
,从我看到的。如果没有,那么您可能还有其他问题,但这些问题需要初始化根据填充适配器的列表检查值“RED”。代码张贴在上面。张贴日志。另外,您不需要runOnUiThread()
,因为onPostExecute()
已经在UI上运行了EditCart
?第689行:}的第689行,如果(喷丝头opt2.equals(sel_opt2)){是的,因此您的适配器
为null
。我看不到足够的代码,但可能您在调用此任务后正在初始化它们。无论哪种方式,当您调用.equals()时,它都是null
在itI上,我在加载微调器的地方添加了微调器。加载适配器后,我从数据库中获取用户选择,并将微调器的位置设置为该值。但我不确定如何在用户登录并重新填充购物车一周后检查该值是否仍然存在。我需要做的只是在设置之前验证选择是否存在位置。我会初始化它们。它们会填充此活动中另一个类中的微调器。填充微调器没有问题。我尝试的是在将位置设置为“红色”之前验证“微调器1”是否包含选择“红色”。我明白了,看起来您是在异步任务中声明它们的。第689行是什么?有些东西是null
if(SpinStat1==1){
}else if(options1.contains(sel_opt1)){
Spinner1.setSelection(spinnerOpt1.getPosition(sel_opt1));
}
ArrayAdapter<String> spinnerOpt1;
ArrayAdapter<String> spinnerOpt2;
ArrayAdapter<String> spinnerOpt3;