我正在尝试只获取字符串请求,但它给出了这样的错误
Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
Run Code Online (Sandbox Code Playgroud)
我的 API 输出是这样的:
{
"status": true,
"message": "Video uploaded successfully!",
"data": {
"video_name": "674631516178278_abc2.mp4",
"video_thumbnail": "674631516178278_thumb0017.jpg"
}
}
Run Code Online (Sandbox Code Playgroud)
响应代码:
@Override
public void onResponse(Call<String> call, Response<String> response) {
try {
if (response.body() != null)
Log.e("UploadResponse>>>", response.body());
layoutUpload.setVisibility(View.GONE);
if (file.exists()) {
file.delete();
thumb.delete();
}
} catch (Exception e) {
e.printStackTrace();
layoutUpload.setVisibility(View.GONE);
if (file.exists()) {
file.delete();
thumb.delete();
}
}
}
Run Code Online (Sandbox Code Playgroud) 我经常在我所有的 4 个应用程序中使用 google Exoplayer2 库。但是我在播放视频时遇到了一些问题,它会忽略错误:
ExoPlayerImplInternal: Renderer error.
com.google.android.exoplayer2.ExoPlaybackException
at com.google.android.exoplayer2.audio.MediaCodecAudioRenderer.processOutputBuffer(MediaCodecAudioRenderer.java:382)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.drainOutputBuffer(MediaCodecRenderer.java:955)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:510)
at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:479)
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:308)
at android.os.Handler.dispatchMessage(Handler.java:101)
at android.os.Looper.loop(Looper.java:164)
at android.os.HandlerThread.run(HandlerThread.java:65)
Caused by: com.google.android.exoplayer2.audio.AudioTrack$InitializationException: AudioTrack init failed: 0, Config(48000, 12, 92288)
at com.google.android.exoplayer2.audio.AudioTrack.checkAudioTrackInitialized(AudioTrack.java:1358)
at com.google.android.exoplayer2.audio.AudioTrack.initialize(AudioTrack.java:648)
at com.google.android.exoplayer2.audio.AudioTrack.handleBuffer(AudioTrack.java:722)
at com.google.android.exoplayer2.audio.MediaCodecAudioRenderer.processOutputBuffer(MediaCodecAudioRenderer.java:376)
Run Code Online (Sandbox Code Playgroud)
如果你现在想要我的 exoplayer 初始化代码,请看这个。
Android Studio 升级到 3.6.1 后出现了一个 bug。应用程序不断崩溃onResponse()的改造调用。可能是问题,Converter Gson但我不知道确切。我刚刚将 gradle(项目级别)降级到 3.5.3 并且它现在工作得很好。
例外是:
getVideoList$1.onResponse (VideoListActivity.java:17)
retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:37)
android.os.Handler.handleCallback (Handler.java:883)
android.os.Handler.dispatchMessage (Handler.java:100)
android.os.Looper.loop (Looper.java:214)
android.app.ActivityThread.main (ActivityThread.java:7682)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:516)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:950)
Run Code Online (Sandbox Code Playgroud)
我正在使用改造库:
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
Run Code Online (Sandbox Code Playgroud)
好吧,这些库在Gradle3.5.3中运行良好,但在 3.6.1 中崩溃了,所以,我不知道确切的错误,但存在并询问此问题以寻求帮助。如果有小伙伴知道是什么问题,那么我们需要报告它 Retrofit 或 Android Studio。
我正在使用 retofit 服务而不使用回调。所以,它可能与 Kotlin Coroutine 一起使用suspend fun。我参考了很多博客、媒体和教程。scope嗯,使用带有线程的协程很容易获得响应IO and Main。
因此,在参考了一些示例之后,我考虑执行如下代码:
改造服务接口RetrofitInterfaces.kt:
interface RetrofitInterfaces {
@FormUrlEncoded
@POST("get-videos-pagination")
suspend fun getTemplates(@Field("app_name") app_name: String,
@Field("sort_by") sortBy: String,
@Field("video_loaded_ids") loadedIds: String): Response<Model_Video_List>
}
Run Code Online (Sandbox Code Playgroud)
其中Model_Video_List.ktclass 是我的响应数据类。
改造建造者RetrofitClient.kt:
object RetrofitClient {
fun makeRetrofitService(mContext: Context): RetrofitInterfaces {
val gson = GsonBuilder().setLenient().create()
return Retrofit.Builder()
.baseUrl(AppPreferences.getBaseUrl(mContext) + "/api/v3/")
.addConverterFactory(GsonConverterFactory.create(gson))
.build().create(RetrofitInterfaces::class.java)
}
}
Run Code Online (Sandbox Code Playgroud)
这里我使用Gsontoserialise或deserialise Json data。
现在有什么问题以及问题从哪里开始以获得我正在使用的错误响应ResultWrapper.kt:
class ResultWrapper { …Run Code Online (Sandbox Code Playgroud)