Метод RequestParams params.put не получает целое число

#java #android #rest

#java #Android #rest

Вопрос:

Я использую службу Rest для получения списка состояний страны (countryid) из базы данных. Служба хорошо работает в Tomcat, но не работает в Android. Ниже приведен код для вызова службы Rest. Метод params.put(«countryid», CountryId) не получает целое число. Не могли бы вы, пожалуйста, помочь мне решить эту проблему?

 public void getDataForStateSpinner(){
    //new StateSpinnerAsync().execute();
    System.out.println("getDataForStateSpinner(), spnCountry adapter: "   spnCountry);
    System.out.println("spnCountry.getSelectedItem(): "   spnCountry.getSelectedItem());
    if (spnCountry.getSelectedItem()!=null){
        System.out.println("getDataForStateSpinner(), spnCountry adapter isn't empty");
        final Country country = (Country) spnCountry.getSelectedItem();
        int countryID = country.getCountryID();
        RequestParams params = new RequestParams();
        if (countryID>=0){
            params.put("countryid", countryID);
            invokeWS_State(params);
        } else{
            Toast.makeText(mParent.get(), "Can not get CountryID", Toast.LENGTH_LONG).show();
        }
    } 
}

    public void invokeWS_State(RequestParams params){
    System.out.println("Inside invokeWS_State");
    AsyncHttpClient client = new AsyncHttpClient();
    System.out.println("Inside invokeWS_State, client: "   client);
    System.out.println("Inside invokeWS_State onSuccess, params: "   params);
    client.get(stateURL, params, new AsyncHttpResponseHandler(){
        @Override
        public void onSuccess(String respond){
            try{
                System.out.println("Inside invokeWS_State onSuccess, stateURL: "   stateURL);

                System.out.println("Inside invokeWS_State onSuccess, respond:"   respond);
                JSONArray jsonArr = new JSONArray(respond);
                //JSONObject jsonObject = jsonArr.getJSONObject(0);
                System.out.println("Inside invokeWS_State onSuccess jsonArr:"   jsonArr);
                String stateList = jsonArr.toString();
                System.out.println("Inside invokeWS_State onSuccess stateList:"   stateList);
                states = (ArrayList<State>) fromJasonToJava_State(stateList);
                for (State state : states) {
                    System.out.println("State id: "   state.getStateID()   " name: "   state.getStateName());
                }

                spnStateAdapter = new ArrayAdapter<State>(mParent.get(), android.R.layout.simple_spinner_dropdown_item, states);
                spnStateAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spnState.setAdapter(spnStateAdapter);

            } catch (JSONException e){
                e.printStackTrace();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        @Override
        public void onFailure(int statusCode, Throwable error, String content){
            String resultString = null;
            if (statusCode == 404){
                resultString = "Requested resource not found";
                Toast.makeText(mParent.get(), resultString, Toast.LENGTH_LONG).show();
            } else if (statusCode == 500) {
                resultString = "Something went wrong at server end!";
                Toast.makeText(mParent.get(), resultString, Toast.LENGTH_LONG).show();
            } else {
                resultString = "Unexpected Error occcured! [Most common Error: Device might not be connected to Internet or remote server is not up and running]";
                Toast.makeText(mParent.get(), resultString, Toast.LENGTH_LONG).show();
            }

        }
    });
}
  

И ниже приведена служба Rest, которая хорошо работает в Tomcat:

 @Path("/State")
public class StatesResource {
@GET
@Path("/GetStates")
@Produces(MediaType.APPLICATION_JSON)
//http://localhost:8080/com.fms.FMSRestfulWS/State/GetStates?countryid=1
public String getStates(@DefaultValue("1") @QueryParam("countryid") int countryID){
    String states = null;
    try{
        ArrayList<State> feedData = null;
        StateLoading stateLoading = new StateLoading();
        feedData = stateLoading.getAllStatesForCountry(countryID);
        Gson gson = new Gson();
        states = gson.toJson(feedData);
    }catch (Exception e){
        System.out.println("System Error "   e);
    }

    return states;
}
  

}

Ответ №1:

Внесите только одно изменение, оно будет работать идеально.

  params.put("countryid", "" countryID);
  

Комментарии:

1. Я полагаю, вы добавили «», чтобы сделать CountryId строкой, не так ли? Но идентификатор страны в службе является целым числом.

2. да, вы правы, на самом деле метод getParams() не принимает целое число, поэтому, чтобы сделать его строковым, используйте двойные кавычки с целым числом.

3. Я так думаю, но смешно, что он не принимает целое число? Значит ли это, что я должен изменить сервис на пути к String?

4. нет, вам не нужно менять сервисы, в своих проектах я также использовал так много целых чисел, и, наконец, я использую двойные кавычки с целым числом. Это означает, что значение будет таким же, с вашим целым числом ничего не произойдет. Может быть, ваша проблема в другом, если бы это была проблема с integer, тогда это определенно сработало бы с моим ответом

5. Эй, если вы хотите добавить «» при вызове службы, это означает, что параметр service должен быть строковым, я прав?