#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 должен быть строковым, я прав?