私はアンドロイドで初心者です。私はsimple weather apiを呼び出してJSON応答を返します。効率的かつ最適化された方法は、アンドロイドでAPI呼び出しを行う方法です
私は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をヒットさせる他の方法を教えてください。
この質問はライブラリの推奨回答を集めています(主に意見を基にしています) –
どのようにして「効率的かつ最適化」されていても、どのようにコード化されているのかが分かります。ここであなたのコードを見ると、常にすべてのメソッドで新しいオブジェクトを作成しています。まず、コードの再利用が必要であることをお勧めします。 –