- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我使用 Laravel 构建了一个简单的 API,它运行良好。我的 Android 应用程序应该使用来自此 API 的数据,但对于某些 JSON 响应,我收到错误
Expected BEGIN_OBJECT but was STRING at line 1 column 1 path
在收到此错误之前,错误是以下错误:
Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path
然后我setLenient(true)
来解决。
我在许多其他帖子中看到问题是格式错误的 JSON,但它似乎一切正常。
给我错误的 JSON 响应:
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImRhMWUxNzU4YmI1YTFjMjAzZDI1MDk5OTM4YTljMjgwNDUyMjYzMDFhNjZiZmViZmJlMTQyY2FmNGU4OGUwMzc2NTZkN2RmZjI4NDUxMTEzIn0.eyJhdWQiOiIxIiwianRpIjoiZGExZTE3NThiYjVhMWMyMDNkMjUwOTk5MzhhOWMyODA0NTIyNjMwMWE2NmJmZWJmYmUxNDJjYWY0ZTg4ZTAzNzY1NmQ3ZGZmMjg0NTExMTMiLCJpYXQiOjE1NTE3OTIzMzAsIm5iZiI6MTU1MTc5MjMzMCwiZXhwIjoxNTgzNDE0NzMwLCJzdWIiOiIxIiwic2NvcGVzIjpbXX0.bi4l9mpUDLoYMLWwd1JyCAfoN2GtwpnpEmGnzsoDoIP_rcTWfT9IsixX4iwtbjSdOTBFkqSD9oGz8KncI24spgnKhofZelClSP6tNtI6P8q2b_PmnefytmNfu_fWBAvSTD2Tia8-cMCu_eF9QfNoOv_9JCYAaY__DY2W_zI3u8uLv25EZQPgBiW7MIT_gm9ZnD6JJlCL4rkgUuhdDG8lkjHCryAYVBqXsGLizl6YdgBp8zMYzONzjxT4nhTARL_aywE9ejZCt5Mkh5qvoGms4zkMMAW0OIYVP_puB7MSPJAriCR1kaBO06MSNGcfAdorn5VDpfwFV8t25mftOeaM1x8IvWT1K0_Hi0BtdV2twtJ-_uHcmIn8QiF3Tc6On7YWWWGEfJw0vAGqK5RaYtWVSo5iWbAiD5rsmCQRQDsg4GnEH9AnYHjcjortBe01YuimQ4TMSIgWLpRfExwcPgQkonklWqODcE8nvuWzyKUirmm56gGj1wBZciqrYsDRTImP4Ntv1Q5Tb3r2PoFlqxfn3_qux1OQpTyzHGEOEaE9ZQnNoELjwGd5nUuFOYCOdwafIUsG0atHtoPBj_S6jTsJJdIWqQzCexchpkwBUgP5i6o1QCai7BcOnTXKJ3V6kV17SGtiP7gqTM9fvESD0BIuK4Xd0dsA8mc67_HwLJyhpXM",
"token_type": "Bearer",
"expires_at": "2019-03-19"
}
工作 JSON 响应:
{
"message": "The given data was invalid.",
"errors": {
"username": [
"The username has already been taken."
]
}
}
我用 JSONLint 测试了 JSON它说 JSON 一切都很好
不工作 - Laravel JSON 响应
return response()->json([
'access_token' => $tokenResult->accessToken,
'token_type' => 'Bearer',
'expires_at' => Carbon::parse(
$tokenResult->token->expires_at
)->toDateString()
], 200);
工作 - Laravel JSON 响应
return response()->json([
'message'=>'Cadastro realizado.',
'user_id' => $user->id
], 201);
Android - 登录
btnSignin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "onClick: " + etSigninUser.getText().toString());
Log.d(TAG, "onClick: " + etSigninPassword.getText().toString());
Call<LoginResponse> call = apiService.userLogin(
etSigninUser.getText().toString(),
etSigninPassword.getText().toString(),
false
);
call.enqueue(new Callback<LoginResponse>() {
@Override
public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
Log.d(TAG, "onResponse: " + response.code());
}
@Override
public void onFailure(Call<LoginResponse> call, Throwable t) {
Log.d(TAG, "onFailure: " + t.toString() + " " + t.getCause());
Log.d(TAG, "onFailure: " + t.toString());
}
});
}
});
Android - 登录响应模型
public class LoginResponse {
@SerializedName("access_token")
@Expose
private String accessToken;
@SerializedName("token_type")
@Expose
private String tokenType;
@SerializedName("expires_at")
@Expose
private String expiresAt;
public String getAccessToken() {
return accessToken;
}
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
public String getTokenType() {
return tokenType;
}
public void setTokenType(String tokenType) {
this.tokenType = tokenType;
}
public String getExpiresAt() {
return expiresAt;
}
public void setExpiresAt(String expiresAt) {
this.expiresAt = expiresAt;
}
}
**Android - Retrofit 2 调用 **
@FormUrlEncoded
@POST("auth/login")
Call<LoginResponse> userLogin(
@Field("username") String username,
@Field("password") String password,
@Field("remember_me") boolean remember_me
);
我看不出我的代码有什么问题,一切看起来都很好,为什么我会收到这个错误?JSON 是否格式错误?
编辑 1 - postman
最佳答案
我遇到了这个问题,我花了很多时间才弄明白。
我在这里找到了解决方案:https://stackoverflow.com/a/56903479/3971619
TLDR:用于创建 Retrofit 对象的 BASE_URL 变量在/之后不应有任何内容
替换:
val authApiService = Retrofit.Builder()
.baseUrl("https://test.com/api/test") //There is path after the /
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build().create(AuthService::class.java)
通过
val authApiService = Retrofit.Builder()
.baseUrl("https://test.com/") //It should only be the base url without a path
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build().create(ServiceClass::class.java)
关于android - 预期 BEGIN_OBJECT 但在第 1 行第 1 列路径中为 STRING - Laravel 到 Retrofit 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55004165/
大家好,我遇到了 Expected a string but was BEGIN_OBJECT 的问题我已经浏览了 2 天了,我找不到解决方案,需要帮助来解决这个问题,谢谢 我将 json 内容存储在
我正在尝试读取一个简单的 JSON 响应: { "response": "ok" } 这是我的代码: JsonReader reader = new JsonReader(new InputStr
我是初学者,我正在我的应用中使用 Retrofit 2。我有这个 JSON。 (我尝试了很多解决方案,但对我没有任何帮助)。感谢您的帮助 我遇到的错误:应为 BEGIN_ARRAY 但在第 1 行第
我收到这个 json 作为来自休息服务器的响应: { "externalOrderId":"5cb9bc46-aaa3-43ff-bb1a-6b17443f63ea", "shortId
我正在尝试解析在我的应用程序中使用 gson 和 okhttp 的 JSON 字符串数据。 l 使用回收 View 来显示数据。当我运行应用程序时,我得到了致命的异常(exception) E/And
我是java初学者,我需要一些帮助,我看过很多关于的帖子,但没有解决他们的问题 我有来自 url 的 json 对象,就像这样 { 'history':[{ 'id':
我正在使用 Retrofit 2 发送 HTTP 请求,我已经定期完成了所有操作,但是,情况“不标准”。我有一个问题,响应类中要接收的对象之一曾经作为对象发送,而另一个作为列表发送。所以我不知道是在响
我从 .NET WS 获取 JSON 响应(项目列表),因此我想在 Android 应用程序中转换为列表。但是当使用 GSON 库时,出现以下异常: com.google.gson.JsonSynta
类别 class PrintRequest { private String data; private String userImageBase64;
如何使用 Retrofit 解析此内容?我收到错误 BEGIN_OBJECT but was BEGIN_ARRAY Json 如下,它包含一个结果数组对象,该对象有一个为 null 的数组对象和信息
我正在努力通过改造和 RXAndroid 从 Android 与我的 REST API 进行交互,但遇到了问题。 当我向“api/users/{id}/{id}/classes”发送 GET 请求时,
我已经阅读了很多有关此错误的答案,但没有找到适合我的解决方案,也许类对象不相同 我的错误是: com.google.gson.JsonSyntaxException:java.lang.Illegal
我在使用 retrofit 调用进行解析时遇到问题。这不是重复的问题。我尝试了太多的谷歌搜索也尝试了很多解决方案,但它在我的情况下不起作用。所以请不要对这个问题投反对票。 错误 05-04 04:18
我今天才开始使用 Retrofit 库。我在获取一些 json 数据时遇到问题。 我尝试获取的 JSON 数据如下所示: [ {"id":"1","genre_id":"27","name":"
我正在尝试解析 the JSON response from this link我得到了这个异常(exception): Expected BEGIN_ARRAY but was BEGIN_OBJE
我正在努力学习 MVP。我在教程和 YouTube 视频的帮助下编写了代码。首先,我使用了 Json2Class 插件。之后,我创建了一个 Json-Server,只是为了从 REST API 获取一
我这样构建我的 Retrofit 实例: Retrofit retrofit = new Retrofit.Builder() .baseUrl(server.url("/")
您好,我是 Retrofit 库的新手,我在解析某些 json 时遇到问题。我已经查看了 Stackoverflow 上的其他一些解决方案,但对我的问题不太满意。我试图让一个简单的网络服务工作。任何建
这是我的 JSON 数据: [ { "page": 0, "threads": [ { "
我在尝试将 JSON 解码为对象时遇到 GSON 错误。错误(Expected BEGIN_OBJECT but was STRING at line 3 column 22)指向下方输入的第 3 行
我是一名优秀的程序员,十分优秀!