【发布时间】:2025-12-26 23:45:07
【问题描述】:
我正在尝试使用 Retrofit 2 和 Web API 2 将对象从我的客户端 sq-lite 数据库上传到 MSSQL。
如果我将null 或new byte[1000] 分配给访问,该应用程序可以正常运行。图像,但每当从 sq-lite 数据库中检索其分配的值时,我都会收到错误响应代码 400
{
"Message": "The request is invalid.",
"ModelState": {
"visit.Image[0]": [
"An error has occurred."
],
"visit.Image[1]": [
"An error has occurred."
]
}
}
这是我在 android 中的模型:
public class Visit {
public int VisitId;
public String DealerMId;
public byte[] Image; // read image from database (blob data type)
}
这是我如何从数据库中检索值并制作访问对象的代码
public Visit getVisitByVisitId(long visitId) {
SQLiteDatabase db = this.getReadableDatabase();
String selectQuery = "SELECT * FROM " + TABLE_VISIT + " WHERE "
+ KEY_ID + " = " + visitId;
Cursor c = db.rawQuery(selectQuery, null);
if (c != null)
c.moveToFirst();
Visit visit = new Visit();
visit.VisitId = c.getInt(c.getColumnIndex(KEY_ID));
visit.DealerMId = c.getString(c.getColumnIndex(KEY_DEALER_MID));
visit.Image= c.getBlob(c.getColumnIndex(KEY_PICTURE));
return visit ;
}
这是改造服务中使用的接口:
@POST("visits/PostVisit")
public Call<Integer> postVisit(@Body Visit visit);
这是活动代码:
Visit vistit = db.getVisitById(1) ;
// Note that : every thing working fine
// if visit.Image = null or visit.Image = new byte[1000] or visit.Image = new byte[]{1,4,3 ..}
// but I am receiving error 400 when visit.Image contains value from database
Call<Integer> call = RetrofitService.postVisit(visit);
call.enqueue(new Callback<Integer>() {
@Override
public void onResponse(Call<Integer> call, Response<Integer>response){
//....
}
@Override
public void onFailure(Call<Integer> call, Throwable t) {
//....
}
});
还有这个 Web API 2 代码
[HttpPost]
public IHttpActionResult PostVisit(Visit visit)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.Visits.Add(visit);
try
{
db.SaveChanges();
}
catch (DbUpdateException)
{
if (VisitExists(visit.VisitId))
{
return Ok(-1);
}
else
{
throw;
}
}
return Ok(visit.VisitId);
}
以下来自android studio的屏幕截图显示了Visit.Image的检索内容,我确信它本身的内容没有问题,因为我可以在我的Android应用程序的ImageView中读取它。
【问题讨论】:
-
But I am receiving error 400 when visit.Image contains value from database你能贴出如何从数据库中检索值并制作Visit对象的代码 -
嗨,我已经编辑了问题并发布了所需的代码。
-
仅供参考。我可以在同一个应用程序中显示从 sq-lite 到 ImageView 的图像。
-
你确定你从
c.getBlob()得到正确的字节吗?调试看看visit.Image里面有什么。 -
我在问题末尾添加了屏幕截图和我的评论。
标签: android upload asp.net-web-api2 retrofit2