我正在研究使用 Retrofit2 和 RxJava 的 Java 8 REST 客户端设置。使用时GsonConverterFactory一切都会按预期进行。当切换到 a 时JacksonConverterFactory,我根本看不到任何结果(但也不例外)。根据日志,REST 调用本身是正常的。
GitHub上的完整示例。
我正在开发一个从 soundcloud 中选取数据的项目,但我似乎无法解决这个问题。请帮我。
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile files('libs/gson-2.6.2.jar')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
}
Run Code Online (Sandbox Code Playgroud)
这是我的代码
RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(Config.API_URL).build();
SCService scService = restAdapter.create(SCService.class);
scService.getRecentTracks(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()), new Callback<List<Track>>() {
@Override
public void onResponse(Call<List<Track>> call, Response<List<Track>> response) {
Log.d(TAG, "First track title: " + tracks.get(0).getTitle());
}
@Override
public void onFailure(Call<List<Track>> call, Throwable t) {
Log.d(TAG, "Error: " + error);
}
});
Run Code Online (Sandbox Code Playgroud)
请帮忙!
我在我的应用程序中使用 Retrofit 2 和 rxjava 2。这些是我的 gradle 实现:
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.4.0'
implementation 'io.reactivex.rxjava2:rxjava:2.2.1'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
Run Code Online (Sandbox Code Playgroud)
这是我的 API 连接类:
public class ApiConnection {
private static String BaseUrl = "http://mysites.com/";
private static Retrofit retrofit = null;
public static Retrofit getClient() {
Gson gson = new GsonBuilder()
.setLenient()
.create();
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(BaseUrl)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
}
return retrofit;
}
}
Run Code Online (Sandbox Code Playgroud)
我在这一行遇到错误:
RxJava2CallAdapterFactory
Run Code Online (Sandbox Code Playgroud)
这是错误:
Cannot resolve symbol 'RxJava2CallAdapterFactory
Run Code Online (Sandbox Code Playgroud)
我的代码有什么问题吗?
我想通过改造和 rxjava 连接到服务器。当我使用 call 时它可以工作,一切都很好。但是当尝试使用 rxjava 时,它会遇到麻烦。错误文本:
无法找到 io.reactivex.Single 的调用适配器
在 build.gradle 中我实现了改造适配器。但我不知道问题是什么。这是我的等级:
implementation 'com.squareup.picasso:picasso:2.71828'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.8'
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.retrofit2:adapter-rxjava:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
implementation "android.arch.persistence.room:runtime:1.1.1"
annotationProcessor "android.arch.persistence.room:compiler:1.1.1"
Run Code Online (Sandbox Code Playgroud)
api客户端代码:
public class ApiClient {
public static final String BASE_URL="http://192.168.1.100/digikala/";
private static Retrofit retrofit=null;
public static Retrofit getClient(){
if(retrofit==null){
retrofit=new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(BASE_URL)
.build();
}
return retrofit;
}
Run Code Online (Sandbox Code Playgroud)
api服务代码:
public interface ApiService {
@GET("readamazing.php")
Single<List<Product>> getSingleProducts();
}
Run Code Online (Sandbox Code Playgroud)
主要活动代码:
ApiService apiService=ApiClient.getClient().create(ApiService.class);
apiService.getSingleProducts().subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new SingleObserver<List<Product>>() {
@Override
public void …Run Code Online (Sandbox Code Playgroud) 我想发送一个 HTTP post 请求,到目前为止一切都很好(我在这个应用程序中发送了 10 多个请求),但现在出现了问题。
我收到此错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Caused by: java.lang.IllegalArgumentException: No Retrofit annotation found. (parameter #2)
Run Code Online (Sandbox Code Playgroud)
这是接口代码:
@POST("index.php/web/request")
Call<MyResponse> getMy(@Header("authorization") String token, MyRequest myRequest);
Run Code Online (Sandbox Code Playgroud)
这是我的 MainActivity 代码:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://link.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
service = retrofit.create(MyAPI.class);
MyRequest myRequest = new MyRequest();
myRequest.setText(text);
final Call<MyResponse> myResponseCall = service.getMy(token, myRequest);
Run Code Online (Sandbox Code Playgroud)
错误在这一行:
final Call<MyResponse> myResponseCall = service.getMy(token, myRequest);
Run Code Online (Sandbox Code Playgroud) 我有一个用于将用户注册到数据库的 Api。我正在使用 Retrofit2 库来使用 Api。
当我在邮递员上测试它时,注册 api 返回完美的结果,但是当我在我的 android 应用程序中实现它时,它给出了电子邮件无效的错误。
我使用了所有类型的电子邮件验证,以便仅在电子邮件有效时提交表单。我无法理解这个问题。
这是我的api供您参考:
**http://ec2-54-201-213-169.us-west-2.compute.amazonaws.com:9000/api/v1/auth/signup**
Run Code Online (Sandbox Code Playgroud)
这是我的改造 Api:
@FormUrlEncoded
@POST("auth/signup")
Call<DefaultResponse> signup(
@Field("userId") String userId,
@Field("email") String email,
@Field("firstName") String firstName,
@Field("lastName") String lastName,
@Field("password") String password,
@Field("confirmPassword") String confirmPassword
);
Run Code Online (Sandbox Code Playgroud)
Api 有一个用于验证电子邮件的内置检查,即使电子邮件有效,它也会在我运行我的应用程序时被触发。
这是Java实现:
Call<DefaultResponse> call = RetrofitClient
.getInstance()
.getApi()
.signup(firstName, lastName, email, password, confirmPassword, userId);
call.enqueue(new Callback<DefaultResponse>() {
@Override
public void onResponse(Call<DefaultResponse> call, Response<DefaultResponse> response) {
DefaultResponse defaultResponse = response.body();
if (response.code() == 200) {
ViewUtils.showSuccessToast(RegisterActivity2.this, "Registered Successful"); …Run Code Online (Sandbox Code Playgroud) MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = Screen.LoginScreen.route
) {
composable(route = Screen.LoginScreen.route) {
navBackStackEntry ->
val factory = HiltViewModelFactory(LocalContext.current, navBackStackEntry)
val viewModel: LoginViewModel = viewModel(key = "LoginViewModel", factory = factory)
LoginScreen(
viewModel = viewModel,
onNavigateToNextScreen = navController::navigate,
navController = navController
)
}
composable(route = Screen.HomeScreen.route) {
navBackStackEntry ->
val factory = HiltViewModelFactory(LocalContext.current, navBackStackEntry)
val viewModel: HomeViewModel = viewModel(key = "HomeViewModel", factory = factory)
HomeScreen(
)
}
} …Run Code Online (Sandbox Code Playgroud) 我想了解Retrofit的工作原理,但官方文档非常薄弱.
我需要提出一个非常简单的GET请求,并将响应作为一个String.
现在我使用标准HTTPUrlConnection,它工作得很好,只是请求 - 响应
任何人都可以告诉我如何获得String响应而不将其转换为对象或类似的东西?
为什么我不能像这样使用@DELETE参数@Url
@DELETE
Call<ServerResponse> deleteAbsence(@Path("id") int absenceId , @Url String url);
Url passed ="././deleteAbsence/{id}"
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪
java.lang.IllegalArgumentException: @Path can only be used with relative url on @DELETE (parameter #2)
for method WebApiInterface.deleteAbsence
at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:752)
at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:743)
at retrofit2.ServiceMethod$Builder.parameterError(ServiceMethod.java:761)
at retrofit2.ServiceMethod$Builder.parseParameterAnnotation(ServiceMethod.java:393)
at retrofit2.ServiceMethod$Builder.parseParameter(ServiceMethod.java:336)
at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:204)
at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170)
at retrofit2.Retrofit$1.invoke(Retrofit.java:147)
Run Code Online (Sandbox Code Playgroud) 所以从服务器我会得到这样的JSON:
{
"success": "1",
"data": [
{
"id": 1,
"title": "1",
"url": "5",
"image": "resources/assets/images/banner_images/1548316546.mitra lakuin.png",
"type": "category"
},
{
"id": 2,
"title": "2",
"url": "5",
"image": "resources/assets/images/banner_images/1548316605.mobile banner_-02 (1).png",
"type": "category"
},
{
"id": 4,
"title": "4",
"url": "5",
"image": "resources/assets/images/banner_images/1547010221.gratis ongkir.png",
"type": "category"
},
{
"id": 5,
"title": "Customer",
"url": "5",
"image": "resources/assets/images/banner_images/1548316659.customer service.png",
"type": "category"
}
],
"message": "Banners are returned successfull."
}
Run Code Online (Sandbox Code Playgroud)
我创建了2个类,以便将该JSON转换为Banner对象.
// 1.
class BannerData(val message : String, val success : String, val data …Run Code Online (Sandbox Code Playgroud)