retrofit2 相关问题

Retrofit2是Android和Java的类型安全REST客户端Retrofit的第二个版本。它由Square,Inc。开发。

如何修复无法解析符号android studio

我对android开发非常陌生,基本上我一直在努力尝试修复这个错误,当我尝试导入retrofit2时,我遇到了一个错误,例如(C...

回答 1 投票 0

无法返回添加到改造入队方法中的数组列表

我尝试将数组添加到改造排队方法内的数组中。但它不返回数组。我有如下代码。我不知道我犯了什么错误。 私人乐趣 getAllAudio():ArrayList 我尝试将数组添加到改造排队方法内的数组中。但它不返回数组。我有如下代码。我不知道我犯了什么错误。 private fun getAllAudio():ArrayList<Music>{ val templList = ArrayList<Music>() val service = SongFactory.makeSongLists() val response = service.getAllSongs() response.enqueue(object :Callback<ArrayList<Music>>{ override fun onResponse( call: Call<ArrayList<Music>>, response: Response<ArrayList<Music>> ) { response.body()?.let { for (items in it){ var music = Music(items.album,items.artist,items.duration,items.id,items.path,items.songuri,items.title) templList.add(music) } } } override fun onFailure(call: Call<ArrayList<Music>>, t: Throwable) { Toast.makeText(this@MainActivity, "Error ${t.message}", Toast.LENGTH_SHORT).show() } }) Log.d("get",templList.toString()) return templList } 我尝试记录我的结果,它显示[] 你必须在 onResponse() 函数中返回 templList,因为改造需要几毫秒的时间,但在这里你返回空列表而没有得到响应。

回答 1 投票 0

使用 kotlin.serialization 在偏移量 0 处获取意外的 json 标记

尝试从这里解析json字符串,但是kotlin序列化抛出此错误:kotlinx.serialization.json.internal.JsonDecodingException: Unexpected JSON token at offset 0: Expected beg...

回答 1 投票 0

改造错误:需要一个字符串,但在第 1 行第 92 列路径 $.belongs_to_collection 处是 BEGIN_OBJECT

我需要调用 api 以通过 ID 接收电影的详细信息。当我拨打第一个电话时,它可以正常工作。如果第二个调用与第一个调用具有相同的 ID,它也可以工作,依此类推...

回答 1 投票 0

如果我有一个 JsonArray 和 JsonArray 中的动态 JsonObject,如何创建 pojo 类?

Android上使用Retrofit调用api时出现以下问题 响应json [ { “测试1”:10, “测试2”:20, “测试3”:37, “测试列表”...

回答 1 投票 0

使用Retrofit2在POST请求中发送JSON

我正在使用 Retrofit 集成我的 Web 服务,但我不明白如何使用 POST 请求将 JSON 对象发送到服务器。我目前陷入困境,这是我的代码: 活动:- @覆盖

回答 5 投票 0

Retrofit 2 如何处理 API 服务接口中传递给 Retrofit.create() 的函数注释?

我是 Java 编程新手,尝试了解注释在大型库中的工作原理。 有人可以向我展示代码片段,其中改造实际上正在处理来自...的函数注释吗?

回答 1 投票 0

如何在Retrofit 2中上传图像文件

我有一张邮递员的图片,如下所示。我怎样才能在 Retrofit 2 中做同样的事情? 我已经声明了这样的接口: @多部分 @POST(“/api/Pharmarcy/UploadImage”) 致电 我有一张邮递员的图片,如下所示。我怎样才能在 Retrofit 2 中做同样的事情? 我已经声明了这样的接口: @Multipart @POST("/api/Pharmarcy/UploadImage") Call<ResponseBody> uploadPrescriptionImage( @Query("accessToken") String token, @Query("pharmarcyRequestId") int pharmacyRequestedId, @Part MultipartBody.Part image); @Multipart @POST("user/updateprofile") Observable<ResponseBody> updateProfile(@Part("user_id") RequestBody id, @Part("full_name") RequestBody fullName, @Part MultipartBody.Part image, @Part("other") RequestBody other); //pass it like this File file = new File("/storage/emulated/0/Download/Corrections 6.jpg"); RequestBody requestFile = RequestBody.create(MultipartBody.FORM, file); // MultipartBody.Part is used to send also the actual file name MultipartBody.Part body = MultipartBody.Part.createFormData("image", file.getName(), requestFile); // add another part within the multipart request RequestBody fullName = RequestBody.create(MultipartBody.FORM, "Your Name"); service.updateProfile(id, fullName, body, other); 看看我传递多部分和字符串参数的方式。希望这对您有帮助! 对于那些有inputStream的人,您可以使用Multipart上传inputStream。 @Multipart @POST("pictures") suspend fun uploadPicture( @Part part: MultipartBody.Part ): NetworkPicture 然后在您的存储库类中: suspend fun upload(inputStream: InputStream) { val part = MultipartBody.Part.createFormData( "pic", "myPic", RequestBody.create( MediaType.parse("image/*"), inputStream.readBytes() ) ) uploadPicture(part) } 如果您的后端不允许多部分,您可以将输入流转换为字节并将字节数组作为请求正文发送,就像这样。 // In your service @PUT suspend fun s3Upload( @Header("Content-Type") mime: String, @Url uploadUrl: String, @Body body: RequestBody ) // In your repository val body = RequestBody.create(MediaType.parse("application/octet"), inputStream.readBytes()) networkService.s3Upload(mime, url, body) 要获取输入流,您可以执行类似的操作。 在您的片段或活动中,您需要创建一个返回 InputStream 的图像选择器。 InputStream 的优点是它可以用于云上的文件,例如 Google Drive 和 Dropbox。 从 pickImagesLauncher.launch("image/*") 或 View.OnClickListener 呼叫 onOptionsItemSelected。 (请参阅活动结果 API)。 private val pickImagesLauncher = registerForActivityResult(ActivityResultContracts.GetContent()) { uri -> uri?.let { val stream = contentResolver.openInputStream(it) itemViewModel.uploadPicture(stream) } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) btn.setOnClickListener { pickImagesLauncher.launch("image/*") } } 上传图片请点击此链接 import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; class AppConfig { private static String BASE_URL = "http://mushtaq.16mb.com/"; static Retrofit getRetrofit() { return new Retrofit.Builder() .baseUrl(AppConfig.BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build(); } } ======================================================== import okhttp3.MultipartBody; import okhttp3.RequestBody; import retrofit2.Call; import retrofit2.http.Multipart; import retrofit2.http.POST; import retrofit2.http.Part; interface ApiConfig { @Multipart @POST("retrofit_example/upload_image.php") Call<ServerResponse> uploadFile(@Part MultipartBody.Part file, @Part("file") RequestBody name); /*@Multipart @POST("ImageUpload") Call<ServerResponseKeshav> uploadFile(@Part MultipartBody.Part file, @Part("file") RequestBody name);*/ @Multipart @POST("retrofit_example/upload_multiple_files.php") Call<ServerResponse> uploadMulFile(@Part MultipartBody.Part file1, @Part MultipartBody.Part file2); } 我完全同意@tir38和@android_griezmann。这将是 Kotlin 中的版本: interface servicesEndPoint { @Multipart @POST("user/updateprofile") fun updateProfile(@Part("user_id") id:RequestBody, @Part("full_name") fullName:RequestBody, @Part image: MultipartBody.Part, @Part("other") other:RequestBody): Single<UploadPhotoResponse> companion object { val API_BASE_URL = "YOUR_URL" fun create(): servicesPhotoEndPoint { val retrofit = Retrofit.Builder() .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .baseUrl(API_BASE_URL) .build() return retrofit.create(servicesPhotoEndPoint::class.java) } } } // Pass it like this val file = File(RealPathUtils.getRealPathFromURI_API19(context, uri)) val requestFile: RequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file) // MultipartBody.Part is used to send also the actual file name val body: MultipartBody.Part = MultipartBody.Part.createFormData("image", file.name, requestFile) // Add another part within the multipart request val fullName: RequestBody = RequestBody.create(MediaType.parse("multipart/form-data"), "Your Name") servicesEndPoint.create().updateProfile(id, fullName, body, fullName) 要获取真实路径,请使用RealPathUtils。在这个问题中检查 @Harsh Bhavsar 的答案中的此类:如何从 URI 获取完整文件路径。 要getRealPathFromURI_API19,您需要READ_EXTERNAL_STORAGE的权限。 使用 Retrofit 2.0 你可以使用这个: @Multipart @POST("uploadImage") Call<ResponseBody> uploadImage(@Part("file\"; fileName=\"myFile.png\" ")RequestBody requestBodyFile, @Part("image") RequestBody requestBodyJson); 提出要求: File imgFile = new File("YOUR IMAGE FILE PATH"); RequestBody requestBodyFile = RequestBody.create(MediaType.parse("image/*"), imgFile); RequestBody requestBodyJson = RequestBody.create(MediaType.parse("text/plain"), retrofitClient.getJsonObject(uploadRequest)); //make sync call Call<ResponseBody> uploadBundle = uploadImpl.uploadImage(requestBodyFile, requestBodyJson); Response<BaseResponse> response = uploadBundle.execute(); 请参考https://square.github.io/retrofit/ @Multipart @POST(Config.UPLOAD_IMAGE) Observable<Response<String>> uploadPhoto(@Header("Access-Token") String header, @Part MultipartBody.Part imageFile); 你可以像这样调用这个API: public void uploadImage(File file) { // create multipart RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file); MultipartBody.Part body = MultipartBody.Part.createFormData("image", file.getName(), requestFile); // upload getViewInteractor().showProfileUploadingProgress(); Observable<Response<String>> observable = api.uploadPhoto("",body); // on Response subscribeForNetwork(observable, new ApiObserver<Response<String>>() { @Override public void onError(Throwable e) { getViewInteractor().hideProfileUploadingProgress(); } @Override public void onResponse(Response<String> response) { if (response.code() != 200) { Timber.d("error " + response.code()); return; } getViewInteractor().hideProfileUploadingProgress(); getViewInteractor().onProfileImageUploadSuccess(response.body()); } }); } 改造2.0解决方案 @Multipart @POST(APIUtils.UPDATE_PROFILE_IMAGE_URL) public Call<CommonResponse> requestUpdateImage(@PartMap Map<String, RequestBody> map); 和 Map<String, RequestBody> params = new HashMap<>(); params.put("newProfilePicture" + "\"; filename=\"" + FilenameUtils.getName(file.getAbsolutePath()), RequestBody.create(MediaType.parse("image/jpg"), file)); Call<CommonResponse> call = request.requestUpdateImage(params); 你可以使用 图片/jpg 图片/png 图片/gif 这很容易。这是API接口 public interface Api { @Multipart @POST("upload") Call<MyResponse> uploadImage(@Part("image\"; filename=\"myfile.jpg\" ") RequestBody file, @Part("desc") RequestBody desc); } 您可以使用以下代码拨打电话。 private void uploadFile(File file, String desc) { //creating request body for file RequestBody requestFile = RequestBody.create(MediaType.parse(getContentResolver().getType(fileUri)), file); RequestBody descBody = RequestBody.create(MediaType.parse("text/plain"), desc); //The gson builder Gson gson = new GsonBuilder() .setLenient() .create(); //creating retrofit object Retrofit retrofit = new Retrofit.Builder() .baseUrl(Api.BASE_URL) .addConverterFactory(GsonConverterFactory.create(gson)) .build(); //creating our api Api api = retrofit.create(Api.class); //creating a call and calling the upload image method Call<MyResponse> call = api.uploadImage(requestFile, descBody); //finally performing the call call.enqueue(new Callback<MyResponse>() { @Override public void onResponse(Call<MyResponse> call, Response<MyResponse> response) { if (!response.body().error) { Toast.makeText(getApplicationContext(), "File Uploaded Successfully...", Toast.LENGTH_LONG).show(); } else { Toast.makeText(getApplicationContext(), "Some error occurred...", Toast.LENGTH_LONG).show(); } } @Override public void onFailure(Call<MyResponse> call, Throwable t) { Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_LONG).show(); } }); } 来源:改造上传文件教程。

回答 8 投票 0

Retrofit2 POST 请求,以正文作为参数 Kotlin

我是 Kotlin 新手,无法将现有的 POST 请求参数更改为 body。我查看了其他答案,但没有一个答案具有与我的请求部分类似的代码。我...

回答 2 投票 0

mutableStateFlow 改造和jetpack compose 的问题

我使用 MutableStateFlow 并从服务器获取数据,我需要在屏幕上显示用户名文本 在 onCreate() 中,我从 viewModel 获取配置文件方法,在 log.d 中我的数据是正确的,但 textUserName 未在

回答 1 投票 0

使用当前代码向 Kotlin okHttp Retrofit2 中的每个请求添加自定义标头

我尝试通过将 .addHeader() 添加到 OkHttpClient.Builder() 来向每个请求添加自定义标头,但在构建时出现以下错误: MicroApiClient.kt: (16, 14): 未解决的参考...

回答 2 投票 0

用户从通话活动返回后继续网络操作

我正在开发一个社交应用程序,用户可以在其中发送媒体,现在当用户处于聊天活动时用户选择并发送视频/照片,我们正在使用改造进行网络操作,我们正在上传...

回答 1 投票 0

Android Retrofit 多部分请求分为两部分

我正在学习使用 Retrofit2 从 Android 应用程序进行 REST Api 调用。我有一个终点,它接受两个部分,如下所示: @多部分 @POST(“用户/personImageUpload5”...

回答 1 投票 0

无法将RapidApi与Retrofit一起使用

我是 Retrofit 的新手,我正在尝试将 RapidApi 中的 Google Translate Api 与 Retrofit 结合使用,但我无法将 okhttp 代码片段转换为 Retrofit 这是 Post 请求工作的示例代码片段...

回答 1 投票 0

Android Retrofir2 Multipart 远程 API 调用将内容类型设置为“application/json”

我的 Android Retrofit2 应用程序中有以下远程 REST API 调用。 @多部分 @POST(“用户/测试上传”) 暂停有趣的uploadUImage( @部分人:PersonFull, ...

回答 1 投票 0

动态 JSON 响应解析为 GSON 模型 - 具有动态数据类型的动态密钥

我的 JSON 响应结构如下: { “状态”:真实, “数据”: { “所有者”: { "owner_name": "姓名", ...

回答 1 投票 0

使用 apiKey 时无法从 NewsAPI 获取数据

MainActivity.java RetrofitInstance.getInstance().api.getPosts("一切").enqueue(new Callback() { @覆盖 公共无效 onResponse(@NonNull Call<...

回答 1 投票 0

改造:无法为类创建@Body转换器

我需要通过改造2发送下一个json: { “检查”: { "UUID": "姓名", "修改时间": "2016-03-09T01:13", "创建时间": "2016-03-09T01:13", “审阅者”:“

回答 10 投票 0

在视图模型 MutableStateFlow mvi 中检查响应请求

我目前正在开发一个利用 MVI(模型-视图-意图)架构的 Android 应用程序。在我的 ViewModel 中,我使用 MutableStateFlow 来管理 UI 状态。我想优化我的代码

回答 1 投票 0

在改造中收到错误代码 400 错误请求,但适用于 Postman

我正在开发注册 API 它采用 JSON 输入作为以下/请求参数: {“httpMethod”:“POST”, "名字":"阿里", “姓氏”:&q...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.