我最初在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);
}
});
答案 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我相信。