【问题标题】:Using Java API in Android在 Android 中使用 Java API
【发布时间】:2012-05-04 20:21:45
【问题描述】:

我正在尝试在 Android 中运行 this API java。因为 Android 中没有终端,System.out.printlne.printStackTrace 无法编译,我尝试在找到它们的 CartoDBClientSecuredCartoDBClient 类中替换它。但是,即使这样做,应用程序也会因 LogCat 中的这些错误而意外关闭

这里是代码

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)

感谢您在这件事上的帮助。

【问题讨论】:

  • 代码中的哪一行是第 84 行?
  • 绝对支持 printStackTrace。
  • 问题解决了吗?我有一个类似的。

标签: java android printing logging system.out


【解决方案1】:

我猜你还没有将 org.apache.commons 库添加到你的项目或类路径中。

在这里您可以找到必要的组件并将其添加到您的项目中: http://commons.apache.org/components.html

您可能缺少 IO 组件。不要忘记将它添加到您的类路径中!

【讨论】:

  • 谢谢,我已经添加了推荐的三个库,并且在清单中我写了下一行,这在 java 中是不需要的。
猜你喜欢
  • 2021-12-02
  • 2020-05-24
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
  • 2018-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多