Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在微调器中选择项目后获取微调器值_Java_Android_Retrofit2_Android Spinner - Fatal编程技术网

Java 如何在微调器中选择项目后获取微调器值

Java 如何在微调器中选择项目后获取微调器值,java,android,retrofit2,android-spinner,Java,Android,Retrofit2,Android Spinner,我在我的应用程序中使用spinner我正在使用从服务器获取的数据填充spinner。我正在使用Reformation2作为网络库。我正在从服务器获取两个值,一个是状态名称,另一个是状态id。在微调器中,我显示状态名称,但在选择状态时,它应选择我从服务器获取的相应状态名称id。在微调器中,状态名称显示成功,但我希望获取POJO类和不是项目位置 下面是我的代码: 服务器响应如下所示: { "data": [ { "id": "

我在我的应用程序中使用spinner我正在使用从服务器获取的数据填充spinner。我正在使用Reformation2作为网络库。我正在从服务器获取两个值,一个是状态名称,另一个是状态id。在微调器中,我显示状态名称,但在选择状态时,它应选择我从服务器获取的相应状态名称id。在微调器中,状态名称显示成功,但我希望获取POJO类和不是项目位置

下面是我的代码:

服务器响应如下所示:

{
"data": [
    {
        "id": "5",
        "name": "Bihar"
    },
    {
        "id": "7",
        "name": "Chhattisgarh"
    },
    {
        "id": "10",
        "name": "Delhi"
    }
],
"status": true,
"code": 200
} 

 
States.java

public class States {

@SerializedName("data")
@Expose
private List<AllStates> data = null;
@SerializedName("status")
@Expose
private Boolean status;
@SerializedName("code")
@Expose
private int code;

public States(){

}

public List<AllStates> getData() {
    return data;
}

public void setData(List<AllStates> data) {
    this.data = data;
}

public Boolean getStatus() {
    return status;
}

public void setStatus(Boolean status) {
    this.status = status;
}

public int getCode() {
    return code;
}

public void setCode(int code) {
    this.code = code;
}
}
public class AllStates {

@SerializedName("id")
@Expose
private String id;
@SerializedName("name")
@Expose
private String name;

public AllStates(){

}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
}
public class CalendarFragment extends Fragment {

Spinner spinnerState;
List<AllStates> stateList = new ArrayList<>();
ArrayList<String> stateSpinnerList = new ArrayList<>();

public CalendarFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_calendar, container, false);

    spinnerState = view.findViewById(R.id.spinnerState);

    spinnerState.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            String item = parent.getItemAtPosition(position).toString();
            Toast.makeText(parent.getContext(), "Selected: " + item, Toast.LENGTH_LONG).show();
        }

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

        }
    });

    Retrofit retrofit   = RetrofitClient.getInstance();
    ApiService apiService = retrofit.create(ApiService.class);

    apiService.allStates().subscribeOn(Schedulers.io())
                          .observeOn(AndroidSchedulers.mainThread())
                          .subscribe(new Observer<States>() {
                              @Override
                              public void onSubscribe(Disposable d) {

                              }

                              @Override
                              public void onNext(States states) {

                                 stateList = states.getData();

                                 stateSpinnerList.add("Select state");

                                 for(int i =0;i<stateList.size();i++){

                                     stateSpinnerList.add(stateList.get(i).getName());
                                 }

                                 ArrayAdapter<String> stateAdapter = new ArrayAdapter<>(getActivity(),android.R.layout.simple_list_item_1,stateSpinnerList);
                                 spinnerState.setAdapter(stateAdapter);
                              }

                              @Override
                              public void onError(Throwable e) {

                                  TastyToast.makeText(getActivity(),e.getMessage(),TastyToast.LENGTH_SHORT,
                                                           TastyToast.ERROR).show();
                              }

                              @Override
                              public void onComplete() {

                              }
                          });

    return view;
  }
}
CalenderFragment.java

public class States {

@SerializedName("data")
@Expose
private List<AllStates> data = null;
@SerializedName("status")
@Expose
private Boolean status;
@SerializedName("code")
@Expose
private int code;

public States(){

}

public List<AllStates> getData() {
    return data;
}

public void setData(List<AllStates> data) {
    this.data = data;
}

public Boolean getStatus() {
    return status;
}

public void setStatus(Boolean status) {
    this.status = status;
}

public int getCode() {
    return code;
}

public void setCode(int code) {
    this.code = code;
}
}
public class AllStates {

@SerializedName("id")
@Expose
private String id;
@SerializedName("name")
@Expose
private String name;

public AllStates(){

}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
}
public class CalendarFragment extends Fragment {

Spinner spinnerState;
List<AllStates> stateList = new ArrayList<>();
ArrayList<String> stateSpinnerList = new ArrayList<>();

public CalendarFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_calendar, container, false);

    spinnerState = view.findViewById(R.id.spinnerState);

    spinnerState.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            String item = parent.getItemAtPosition(position).toString();
            Toast.makeText(parent.getContext(), "Selected: " + item, Toast.LENGTH_LONG).show();
        }

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

        }
    });

    Retrofit retrofit   = RetrofitClient.getInstance();
    ApiService apiService = retrofit.create(ApiService.class);

    apiService.allStates().subscribeOn(Schedulers.io())
                          .observeOn(AndroidSchedulers.mainThread())
                          .subscribe(new Observer<States>() {
                              @Override
                              public void onSubscribe(Disposable d) {

                              }

                              @Override
                              public void onNext(States states) {

                                 stateList = states.getData();

                                 stateSpinnerList.add("Select state");

                                 for(int i =0;i<stateList.size();i++){

                                     stateSpinnerList.add(stateList.get(i).getName());
                                 }

                                 ArrayAdapter<String> stateAdapter = new ArrayAdapter<>(getActivity(),android.R.layout.simple_list_item_1,stateSpinnerList);
                                 spinnerState.setAdapter(stateAdapter);
                              }

                              @Override
                              public void onError(Throwable e) {

                                  TastyToast.makeText(getActivity(),e.getMessage(),TastyToast.LENGTH_SHORT,
                                                           TastyToast.ERROR).show();
                              }

                              @Override
                              public void onComplete() {

                              }
                          });

    return view;
  }
}
公共类CalendarFragment扩展了片段{
喷丝器喷丝器状态;
List stateList=新建ArrayList();
ArrayList stateSpinnerList=新的ArrayList();
公共日历片段(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图=充气机。充气(R.layout.fragment\u日历,容器,false);
spinnerState=view.findViewById(R.id.spinnerState);
spinnerState.setOnItemSelectedListener(新AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
String item=parent.getItemAtPosition(position.toString();
Toast.makeText(parent.getContext(),“Selected:”+项,Toast.LENGTH_LONG.show();
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
Refundation-Refundation=RefundationClient.getInstance();
ApiService ApiService=reformation.create(ApiService.class);
apiService.allStates().subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅(新观察员){
@凌驾
认购的公共无效(一次性d){
}
@凌驾
public void onNext(州){
stateList=states.getData();
stateSpinnerList.add(“选择状态”);

对于(inti=0;i,我的理解是,您正在从微调器中选择状态并获取状态名称,但您希望获取stateId

我能想到的一个可能的解决方案是使用HashMap。 当您从微调器接收到状态名时,只需调用map.get(name)即可获得状态Id

编辑:

您可以这样实现它

HashMap<String, Integer> map = new HashMap<>();
for(state in list){
   map.put(state.name, state.id);
}

spinnerState.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            String name = parent.getItemAtPosition(position).toString();
            int id = map.get(name);
        }

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

        }
    });
HashMap map=newhashmap();
用于(列表中的状态){
map.put(state.name,state.id);
}
spinnerState.setOnItemSelectedListener(新AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
字符串名称=parent.getItemAtPosition(position).toString();
int id=map.get(名称);
}
@凌驾
未选择公共无效(AdapterView父级){
}
});

如果您不想使用自定义适配器,则获取选定的微调器位置,并使用该位置获取您的
状态
型号

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
          //      int position = spinnerState.getSelectedItemPosition();

               if(position >= 1){
                   AllStates allStates = stateList.get(position - 1)  
               }
        }

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

        }
    });
spinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
//int position=spinnerState.getSelectedItemPosition();
如果(位置>=1){
AllStates AllStates=stateList.get(位置-1)
}
}
@凌驾
未选择公共无效(AdapterView父级){
}
});

现在,您可以从
allStates
model

自定义对象的用户微调器访问
id
。是的,您的解释是正确的,但我无法在代码中实现。请让我知道代码。@Digvijay我已编辑了实现的答案,希望有帮助。请将其标记为正确(勾号)如果它对您有帮助的话。在
oniselected
方法中实现上述代码时,它会给出错误
java.lang.ArrayIndexOutOfBoundsException:length=15;index=-1
现在工作正常,但一个问题是我没有获得所选项目的id,而是获得下一个项目的id。当您在spinner中的0位置添加默认值时,因此在获取时列表中的值需要减去1 indexOn添加
位置-1
其显示
java.lang.ArrayIndexOutOfBoundsException:length=15;index=-1
错误和应用程序崩溃为0位置选择添加条件。由于首次初始化和选择零位置而导致的应用程序崩溃也会更新我的答案
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
          //      int position = spinnerState.getSelectedItemPosition();

               if(position >= 1){
                   AllStates allStates = stateList.get(position - 1)  
               }
        }

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

        }
    });