Я начинаю работать в android, я пытаюсь вызвать simple weather api, который возвращает ответ JSON.Каковы эффективные и оптимизированные способы вызова API в android
Я хотел знать, каковы эффективные способы совершения вызова api и откуда я могу изучить эти способы.
Я попытался его реализации с помощью Джексон:
WebService.java (копия пасты из некоторой ссылки)
public class WebService {
public <T> T get(String url, T object) throws Exception {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.set("x-system-code", "mobile");
headers.set("x-server-api-password", "mobile");
headers.set("x-server-api-key", "mobile");
headers.set("Connection", "Close");
HttpEntity entity = new HttpEntity("parameters", headers);
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
return (T) restTemplate.exchange(url, HttpMethod.GET, entity, object.getClass()).getBody();
}
public <T> T get(String url, T object, Map uriVariables) throws Exception {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.set("Connection", "Close");
HttpEntity entity = new HttpEntity("parameters", headers);
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
return (T) restTemplate.exchange(url, HttpMethod.GET, entity, object.getClass(), uriVariables).getBody();
}
public <T> T post(String url, Object request, T object) throws Exception {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.set("x-system-code", "mobile");
headers.set("x-server-api-password", "mobile");
headers.set("x-server-api-key", "mobile");
headers.set("Connection", "Close");
HttpEntity entity = new HttpEntity(request, headers);
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
return (T) restTemplate.exchange(url, HttpMethod.POST, entity, object.getClass()).getBody();
}
public void put(String url, Object request) {
try {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
restTemplate.put(url, request);
} catch (Exception e) {
Log.e("WebService - put", e.getMessage(), e);
}
}
public void delete(String url, Object request) {
try {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
restTemplate.delete(url);
} catch (Exception e) {
Log.e("WebService - delete", e.getMessage(), e);
}
}
}`
MainActivity.java
public class MainActivity extends AppCompatActivity {
WebService webService=new WebService();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GetWeather getWeather=new GetWeather();
getWeather.execute();
}
public class GetWeather extends AsyncTask<URL, Integer, response>{
String url;
public GetWeather(){
url="http://api.openweathermap.org/data/2.5/weather?q=Gurgaon&units=metric&appid=94d605bef2c15307c23f65a326d*****";
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected response doInBackground(URL... params) {
try {
response weatherResponse= webService.get(url,new response());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(response response) {
super.onPostExecute(response);
Log.i("response", response.toString());
}
}
}
Ошибка
org.springframework.web.client.ResourceAccessException: I/O error: unexpected end of stream on Connection{api.openweathermap.org:80, proxy=DIRECT hostAddress=128.199.109.89 cipherSuite=none protocol=http/1.1} (recycle count=0); nested exception is java.io.IOException: unexpected end of stream on Connection{api.openweathermap.org:80, proxy=DIRECT hostAddress=128.199.109.89 cipherSuite=none protocol=http/1.1} (recycle count=0) 01-04 07:21:51.536 21098-21137/com.example.rajatgupta.weatherapp W/System.err: at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:491)
Пожалуйста, скажите мне, что я делаю неправильно или любой другой способ сделать API ударом.
Этот вопрос привлекает ответы на рекомендации библиотеки (в первую очередь на основе мнения) –
Каким бы способом вы не выбрали «Эффективный и оптимизированный» до тех пор, пока он не закодирован. Рассматривая свой код здесь, вы всегда создаете новые объекты в каждом методе - я бы предположил, что во-первых, вы должны использовать повторное использование кода. –