0

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

我想摆脱 ion 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);
                }
            });
4

2 回答 2

1

在 ION 2.+ 版本中,API 可能发生了变化。

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

警告说您应该避免使用“+”,因为这样,gradle 将始终获得它找到的最新版本,其中一些 API 可能会更改,然后破坏您的代码。

于 2014-11-15T00:50:26.287 回答
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。

于 2014-11-15T19:11:55.607 回答