从使用罐子转变为离子依赖性

时间:2014-11-14 22:49:31

标签: android android-studio ion

我最初在Android Studio的libs目录中有ion-1.3.8.jar,在build.gradle文件中有compile files('libs/ion-1.3.8.jar')。我在我的libs文件夹中也有(并且仍然有)androidasync-1.3.8.jar,并且在build.gradle中有一个条目。

我想摆脱离线jar而不是使用依赖,但是当我删除jar并将compile 'com.koushikdutta.ion:ion:2.+放入build.gradle文件时,我收到错误("无法解析方法)得到(字符串...))"在我的一个类中的以下代码行:result.getHeaders().get("USER-TOKEN");

我猜这段代码可能不是它应该一直存在的东西,但它确实适用于Ion 1.3.8。我无法弄清楚我应该改变它的内容,虽然我可以通过一些反复试验弄明白,但我想听听社区或Koush的消息。

此外,Android Studio警告我"避免在版本号中使用+;可以导致不可预测和不可重复的构建"。有什么想法吗?

这是我的代码:

Ion.with(activity)
            .load(url)
            .setJsonObjectBody(loginObject)
            .asJsonObject()
            .withResponse()
            .setCallback(new FutureCallback<Response<JsonObject>>() {
                @Override
                public void onCompleted(Exception e, com.koushikdutta.ion.Response<JsonObject> result) {
                    String errorText = activity.getString(R.string.unable_to_login);
                    if (e != null) {
                        String errorMessage = e.getLocalizedMessage();
                        Log.e(TAG, errorMessage);
                        if (errorMessage.contains(activity.getString(R.string.unable_resolve_host))) {
                            errorText = activity.getString(R.string.no_internet);
                        }
                    }
                    else if (result != null) {
                        JsonElement reply = result.getResult().get(activity.getString(R.string.user));
                        if (reply != null) {
                            errorText = NO_ERROR;
                            SessionManager.setProfile(result.getResult());
                            String userToken = result.getHeaders().get(activity.getString(R.string.user_token));
                            SessionManager.createLoginSession(userToken);
                            if (SessionManager.isProfileComplete()) {
                                activity.startActivity(new Intent(activity, NavigationDrawerActivity.class));
                            }
                            else {
                                activity.startActivity(new Intent(activity, ProfileActivity.class));
                            }
                        }
                        else if (result.getResult().getAsJsonArray(activity.getString(R.string.errors)) != null) {
                            errorText = activity.getString(R.string.login_error);
                        }
                    }
                    else { // There was some other problem logging in
                        Log.e(TAG, "Unknown login problem");
                    }
                    requestCompleted.onRequestCompleted(errorText);
                }
            });

2 个答案:

答案 0 :(得分:1)

在ION版本2. +上,API可能已更改。

如果您想使用适用于您的代码的旧API,请将您的依赖项更改为: compile 'com.koushikdutta.ion:ion:1.3.8' 它还会自动为您添加Android Async 1.3.8依赖项。

警告说你应该避免'+'是因为这样,gradle将始终获得它找到的最新版本,其中一些API可以更改然后破坏你的代码。

答案 1 :(得分:0)

API稍微改变了2.其中一个是改变ResponseFuture和RawHeaders类的几个方法的名称。在您的情况下,getHeaders()只是重命名为headers()。

从1.x到2.x的过渡相当轻松,但仍有一些重大变化。

如果您不想处理重大更改,并在gradle中使用最新版本的1.x,请执行以下操作:

编译'com.koushikdutta.ion:ion:1。+

1.x版本之间没有重大变化。目前的1.x版本是1.4.1我相信。