この API Javaを Android で実行しようとしています。Androidにはターミナルがなく、System.out.println
コンパイルされていないため、それらを見つけたクラスとクラスでe.printStackTrace
置き換えようとしました。ただし、LogCat でこれらのエラーが発生してアプリケーションが予期せず終了する場合でも、CartoDBClient
SecuredCartoDBClient
ここにコード
SecuredCartoDBClient:
@Override
public String executeQuery(String sqlQuery){
String json = null;
if(oAuthService == null){
//System.out.println("Error : uninitialized " + getClass().getName());
Log.e(TAG, "Error : uninitialized " + getClass().getName(), null);
return null;
}
OAuthRequest request = new OAuthRequest(Verb.POST, securedApiUrl);
request.addBodyParameter("q", sqlQuery);
oAuthService.signRequest(accessToken, request);
Response response = request.send();
if(!response.isSuccessful()){
//System.out.println("The query " + sqlQuery + " failed.");
Log.w(TAG, "The query " + sqlQuery + " failed.", null);
//System.out.println("Response code : " + response.getCode());
Log.i(TAG, "Response code : " + response.getCode(), null);
}
json = response.getBody();
return json;
}
CartoDBClient.java..
@Override
public String executeQuery(String sqlQuery){
String json = null;
if(apiURL == null){
//System.out.println("Error : uninitialized " + getClass().getName());
Log.e(sqlQuery, "Error : uninitialized " + getClass().getName());
return null;
}
try {
sqlQuery = URLEncoder.encode(sqlQuery,ENCODING);
json = IOUtils.toString(new URL(apiURL+sqlQuery), ENCODING);
} catch (MalformedURLException e) {
//System.out.println("Could not get URL " + apiURL+sqlQuery);
Log.w(TAG, "Could not get URL " + apiURL+sqlQuery);
Log.e(TAG, Log.getStackTraceString(e));
//e.printStackTrace();
} catch (UnsupportedEncodingException e) {
Log.e(TAG, Log.getStackTraceString(e));
//e.printStackTrace();
}catch (IOException e) {
//System.out.println("Could not execute " + sqlQuery+ " on CartoDB : ");
Log.w(TAG, "Could not execute " + sqlQuery+ " on CartoDB : ");
Log.e(TAG, Log.getStackTraceString(e));
//e.printStackTrace();
}
return json;
}
ここで、logcat に表示されたエラー
05-04 19:58:39.128: E/AndroidRuntime(372): FATAL EXCEPTION: main
05-04 19:58:39.128: E/AndroidRuntime(372): java.lang.NoClassDefFoundError: org.apache.commons.io.IOUtils
05-04 19:58:39.128: E/AndroidRuntime(372): at com.geocap.impl.CartoDBClient.executeQuery(CartoDBClient.java:84)
05-04 19:58:39.128: E/AndroidRuntime(372): at com.geocap.Geocap.onCreate(Geocap.java:25)
05-04 19:58:39.128: E/AndroidRuntime(372): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
05-04 19:58:39.128: E/AndroidRuntime(372): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700)
05-04 19:58:39.128: E/AndroidRuntime(372): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752)
05-04 19:58:39.128: E/AndroidRuntime(372): at android.app.ActivityThread.access$1500(ActivityThread.java:123)
05-04 19:58:39.128: E/AndroidRuntime(372): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:993)
05-04 19:58:39.128: E/AndroidRuntime(372): at android.os.Handler.dispatchMessage(Handler.java:99)
05-04 19:58:39.128: E/AndroidRuntime(372): at android.os.Looper.loop(Looper.java:126)
05-04 19:58:39.128: E/AndroidRuntime(372): at
android.app.ActivityThread.main(ActivityThread.java:3997)
05-04 19:58:39.128: E/AndroidRuntime(372): at java.lang.reflect.Method.invokeNative(Native Method)
05-04 19:58:39.128: E/AndroidRuntime(372): at java.lang.reflect.Method.invoke(Method.java:491)
05-04 19:58:39.128: E/AndroidRuntime(372): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
05-04 19:58:39.128: E/AndroidRuntime(372): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
05-04 19:58:39.128: E/AndroidRuntime(372): at dalvik.system.NativeStart.main(Native Method)
この件についてご協力いただきありがとうございます。