我有一个问题,“ JSON在位置0出现意外的令牌#”。
我想做的是在Firebase上使用CloudFunction删除FirebaseUser。
没有返回,但是错误提示“有意外的json令牌#”
这是一些代码:
public interface CloudFunctionsService {
@POST("deleteUser")
Call<Void> deleteUser(@Body String uid);
}
public class FunctionRetrofit {
private static FunctionRetrofit instance = new FunctionRetrofit();
public static FunctionRetrofit getInstance(){
return instance;
}
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.build();
private CloudFunctionsService cfs = retrofit.create(CloudFunctionsService.class);
public CloudFunctionsService getService(){
return cfs;
}
}
exports.deleteUser = functions.https.onRequest((req, res) => {
if (req.body.uid === undefined) {
res.status(400).send('No user id defined');
} else {
var userId = req.body.uid;
admin.auth().deleteUser(userId)
.then(function() {
console.log("Successfully deleted user");
})
.catch(error=> {
console.log("Error deleting user: ", error);
});
res.status(200).end();
}
});
Call<Void> res = FunctionRetrofit.getInstance().getService().deleteUser(user.getUid());
res.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
Log.d("success", "suceess");
}
@Override
public void onFailure(Call call, Throwable t) {
Log.e("Error", t.getMessage().toLowerCase());
}
});
SyntaxError: Unexpected token # in JSON at position 0
at JSON.parse (<anonymous>)
at createStrictSyntaxError (/worker/node_modules/body-parser/lib/types/json.js:157:10)
at parse (/worker/node_modules/body-parser/lib/types/json.js:83:15)
at /worker/node_modules/body-parser/lib/read.js:121:18
at invokeCallback (/worker/node_modules/raw-body/index.js:224:16)
at done (/worker/node_modules/raw-body/index.js:213:7)
at IncomingMessage.onEnd (/worker/node_modules/raw-body/index.js:273:7)
at emitNone (events.js:106:13)
at IncomingMessage.emit (events.js:208:7)
at endReadableNT (_stream_readable.js:1064:12)
答案 0 :(得分:3)
使用 GsonConverterFactory
时,我认为使用@Body
批注时期望json(或序列化为JSON)。当您传递原始String值时,我认为这是错误所在。
请忽略上面的答案。 GsonConverterFactory会将您自己的Type序列化为JSON,但是您要发送的是原始String值。这将不会被序列化,因此ID为3的帖子的正文将为“ 3”-我认为您正在调用deleteUser的api期望的是您未发送的正文中的JSON,这就是您收到错误的原因。我将检查您正在制作的Firebase API调用的文档,以查看其期望帖子正文采用的格式。它更有可能是这样的:
{
"userId": "3"
}
如果是这种情况,那么您将需要一个类:
public class User {
private String userId;
public User(String userId){
this.userId = userId;
}
}
当您可能期望{表示开始JSON对象时,您当前正在发送一个字符作为第一个字符