jp.s6131.sample.controller.HomeController.sampleListを android アプリから呼び出す。
jp.s6131.sampleApp.Code.java
getter/setter 無いと HttpMessageNotReadableException 発生
public class Code {
String id;
String code;
String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
jp.s6131.sampleApp.HelloAndroidActivity.java
public class HelloAndroidActivity extends Activity {
private static String TAG = "sampleApp";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "onCreate");
Uri.Builder builder = new Uri.Builder();
AsyncHttpRequest task = new AsyncHttpRequest(this);
task.execute(builder);
setContentView(R.layout.main);
}
}
jp.s6131.sampleApp.AsyncHttpRequest.java
public class AsyncHttpRequest extends AsyncTask<Uri.Builder, Void, String> {
private Activity mainActivity;
public AsyncHttpRequest(Activity activity) {
this.mainActivity = activity;
}
@Override
protected String doInBackground(Uri.Builder... builder) {
RestTemplate template = new RestTemplate();
template.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
String url = "http://10.0.2.2/sample/sampleList?cd=cd1";
try {
ResponseEntity<Code[]> responseEntity = template.exchange(url, HttpMethod.GET, null, Code[].class);
Code[] resList = responseEntity.getBody();
for (Code res : resList) {
Log.i("sampleApp id = ", (res.id == null ? "null" : res.id));
Log.i("sampleApp code = ", (res.code == null ? "null" : res.code));
Log.i("sampleApp name = ", (res.name == null ? "null" : res.name));
}
return resList.toString();
} catch (Exception e) {
Log.d("Error", e.toString());
}
return "";
}
@Override
protected void onPostExecute(String result) {
}
}
AndroidManifest.xml 追加
<uses-permission android:name="android.permission.INTERNET" />
LogCat ビュー(ログ)の表示
「ウィンドウ」「ビューの表示」「その他」「Android」「LogCat」
仮想デバイスの作成
「ウィンドウ」「Android仮想デバイス・マネージャ」「新規」
装置:Nexus 5
ターゲット:Android 4.4.2 - API Level 19
CPU/ABI:ARM (armeabi-v7a)
メモリー・オプション:RAM:1024
「ホスト GPU を使用する」にチェック
OKで保存、開始ボタンで AVD 開始。
sample プロジェクトサーバー(Tomcat)も起動。
android アプリプロジェクト右クリック、「デバッグ」「Androidアプリケーション」
Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lorg/springframework/core/ErrorCoded
エラーが発生。
Java のビルド・パス、順序およびエクスポートでMaven依存関係からチェックを外すとエラーが消えるが、
実行時に spring for android クラスが not found となってしまう。
pom.xml で exclusion 設定を行う。さらに
java.lang.NoClassDefFoundError: com.fasterxml.jackson.databind.ObjectMapper
が発生するので fasterxml も追加
pom.xml
<dependency>
<groupId>org.springframework.android</groupId>
<artifactId>spring-android-rest-template</artifactId>
<version>1.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.android</groupId>
<artifactId>spring-android-auth</artifactId>
<version>1.0.1.RELEASE</version>
<exclusions>
<exclusion>
<artifactId>spring-core</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.android</groupId>
<artifactId>spring-android-core</artifactId>
<version>1.0.1.RELEASE</version>
<exclusions>
<exclusion>
<artifactId>spring-core</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.2.3</version>
</dependency>
LogCat ビュー で結果を確認。

人気ブログランキングへ