- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我构建了一个 RetroFitService 来返回一些对象。在 MainActivity 中,我只需单击一下按钮即可调用该服务。我似乎得到了某种对象,但我不觉得它实际上是从我指定的 REST API 返回的。它显示在调试器中,但其属性为空:
bFetch.setOnClickListener(v -> {
v.startAnimation(AnimationUtils.loadAnimation(this, R.anim.image_click));
RetrofitService service = ServiceFactory.createRetrofitService(RetrofitService.class, RetrofitService.SERVICE_ENDPOINT);
service.getPosts()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber < Post > () {
@Override
public final void onCompleted() {
Log.e("RetrofitService", "Retrofit Request Completed!");
}
@Override
public final void onError(Throwable e) {
Log.e("RetrofitService", e.getMessage());
}
@Override
public final void onNext(Post post) {
if (post != null) {
// TODO: Some object is returned but its properties are null
Log.e("RetrofitService", "Returned objects: " + post);
Log.e("RetrofitService", "Object Id: " + post.getObjectId());
mCardAdapter.addData(post);
} else {
Log.e("RetrofitService", "Object returned is null.");
}
}
});
});
}
服务:
public interface RetrofitService {
String SERVICE_ENDPOINT = "https://parseapi.back4app.com/";
@Headers({
"X-Parse-Application-Id: asdf",
"X-Parse-REST-API-Key: asdf"
})
@GET("/classes/Post")
Observable < Post > getPosts();
/*curl -X GET \
-H "X-Parse-Application-Id: asdf" \
-H "X-Parse-REST-API-Key: asdf" \
https://parseapi.back4app.com/classes/Post*/
}
curl 效果很好。我没有收到任何错误。可能出了什么问题?我的 @GET
方法不正确吗?`
为了完成,这是 ServiceFactory 类:
public class ServiceFactory {
/**
* Creates a retrofit service from an arbitrary class (clazz)
* @param clazz Java interface of the retrofit service
* @param endPoint REST endpoint url
* @return retrofit service with defined endpoint
*/
public static <T> T createRetrofitService(final Class<T> clazz, final String endPoint) {
final RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(endPoint)
.build();
T service = restAdapter.create(clazz);
return service;
}
}
还有我的 build.gradle,因为我知道所有不同的 Retrofit 版本之间都存在不一致:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
/* ReactiveX */
compile 'io.reactivex:rxjava:1.0.17'
compile 'io.reactivex:rxandroid:0.23.0'
/* Retrofit */
compile 'com.squareup.retrofit:retrofit:1.9.0'
/* OkHttp3 */
compile 'com.squareup.okhttp3:okhttp:3.8.1'
/* RecylerView */
compile 'com.android.support:recyclerview-v7:25.3.1'
/* CardView */
compile 'com.android.support:cardview-v7:25.3.1'
/* Parse */
compile 'com.parse:parse-android:1.13.0'
}
课后:
public class Post implements Serializable {
private static final String CLASS_NAME = "Post";
private String objectId;
private String text;
public Post(String objectId) {
this.setObjectId(objectId);
}
public static String getClassName() {
return CLASS_NAME;
}
public String getObjectId() {
return objectId;
}
private void setObjectId(String objectId) {
this.objectId = objectId;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
curl 响应:
> https://parseapi.back4app.com/classes/Post/
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 259 100 259 0 0 360 0 --:--:-- --:--:-- --:--:-- 395{"results":[{"objectId":"ktEfgr1pFt","text":"Hello World.","createdAt":"2017-08-14T14:07:52.826Z","updatedAt":"2017-08-14T14:07:52.826Z"},{"objectId":"Mmh8l9gjCk","text":"Hello?","createdAt":"2017-08-14T15:19:01.515Z","updatedAt":"2017-08-14T15:19:03.743Z"}]}
最终更新:我更改了 RetrofitService
的 onNext()
方法以传递到 CardAdapter,尽管此处未显示并超出了问题的范围。
@Override
public final void onNext(PostResponse postResponse) {
if (postResponse != null) {
// TODO: Some object is returned but its properties are null
Log.e("RetrofitService", "Objects successfully added to RecyclerView Adapter.");
Log.e("RetrofitService", "Returned objects: " + postResponse.getResults());
Log.e("RetrofitService", "Text " + postResponse.getResults().get(0).getText());
mCardAdapter.addData(postResponse);
//
} else {
Log.e("RetrofitService", "Object returned is null.");
}
}
最佳答案
尝试在 RetrofitService 中使用下面的类
@GET("/classes/Post")
Observable <PostResponse> getPosts();
PostResponse 包装类
public class PostResponse {
private List<Post> results;
public List<Post> getResults() {
return results;
}
public void setResults(List<Post> results) {
this.results = results;
}
}
关于java - Retrofit 对象返回为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45678790/
我正在尝试迁移我的应用程序以使用 RxJava。我已经在使用 Retrofit,因此我正在尝试使用方法返回 Observables 的 Retrofit 接口(interface)。但是我现在在针对它
我想 post 数据如下: { "user_id":"14545646", "list":["4545645","4545645","4545645","4545645"]
我是改造新手。我向网站发出 POST 请求。网站以 HTML 形式返回响应。所以我会解析它。但是 Retrofit 尝试将其解析为 JSON。怎么办? @FormUrlEncoded @POST("/
我想异步执行 2 个网络调用 - 我正在使用 Retrofit+RxJava 来完成这个。这个逻辑来自一个简单的 Runner 类来测试解决方案。注意:这主要涉及服务器端的 RxJava。 我的代码如
我最近在改造的存储库中使用 Flow。 Result 的密封类 enum class ApiStatus{ SUCCESS, ERROR, LOADING } sealed c
我目前正在开发 Retrofit2 客户端的错误处理部分(使用 Retrofit 的 Rx 实现)。 找了一段时间,没有找到简单的方法将Retrofit返回的ResponseBody反序列化到我报错的
我从 retrofit 更新到 retrofit2 后出现此错误。 FATAL EXCEPTION: OkHttp Dispatcher Process: nz.co.datacom.mars.jun
在使用 RxJava 和 Retrofit 2 时,我正在尝试创建单元测试来覆盖我的应用何时收到特定响应。 我遇到的问题是,在 Retrofit 2 中,我看不到在不使用反射的情况下创建 retrof
在 Retrofit 1.9.x 中有一个 RetrofitError.Kind.NETWORK这让您可以轻松确定故障是否由网络错误引起。在新的 2.0 API 中,我们不再有 RetrofitErr
有没有办法用Refit动态输入参数? 我的 Refit 界面中有这段代码: [Get("/click?{parm}")] Task> SaveClick(string parm
有没有办法用Refit动态输入参数? 我的 Refit 界面中有这段代码: [Get("/click?{parm}")] Task> SaveClick(string parm
我知道,Retrofit 在内部使用 OkHttp。但是,我可以看到一些开发人员提供了以下方法的应用 return new Retrofit.Builder() .baseUrl(Bu
在项目上安装这个库之后: compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.0
在 Retrofit 1.x 中,我使用以下模式创建 API 服务类,该类模拟某些构建变体的不良网络连接。 // Retrofit 1 private T create(Class apiServi
Retrofit请求API格式(Android): @POST("getOrderStatus") @Headers("Content-Type:application/json") Obser
当我实例化 RestAdapter 时,我的应用程序总是崩溃 private void submitForm(SignupForm form){ RestAdapter adapter = n
我正要从 retrofit 1.9 迁移到最新版本并遇到问题... 我的设置: 三星 Galaxy S7 Edge(Android 7) 改造 2.3 OkHttp 3.8 迁移后突然遇到这个问题:
我正在尝试在 2.5.1-SNAPSHOT 中使用 retrofit 的协程支持,但我不断收到一个奇怪的异常。 我的改造服务类有: @GET("weather") suspend fun getFor
我正在尝试 Ktor通过转换一些当前正在使用的现有项目 Retrofit . 虽然我可以很容易地将请求转换为: client.get { url("$BASE_URL/something/so
使用改造 2,如何为上传的文件设置动态名称? 目前是这样的: @Part("avatar\"; filename=\"image\" ") RequestBody image, 但是,上传的文件名将是
我是一名优秀的程序员,十分优秀!