【发布时间】:2017-05-15 04:20:30
【问题描述】:
我正在尝试将我的 json 数据导入我的 sqlite,从 web 服务到 android。
这是我开始同步时遇到的错误。
error stating Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
错误出现在这块代码上。
public String processSync(String response) {
String status = FAILED;
try {
String formattedData = getFormattedData(response);
final GsonBuilder gsonBuilder = new GsonBuilder();
final Gson gson = gsonBuilder.create();
ProductDataBean[] productDataBeanArray = gson.fromJson(formattedData, ProductDataBean[].class);
AdministratorHelper administratorHelper = new AdministratorHelper();
status = administratorHelper.insertProductData(context, productDataBeanArray);
} catch (Exception e) {
e.printStackTrace();
}
return status;
}
AdministratorHelper.java
public class AdministratorHelper {
DBLiteUtils dbLiteUtils;
AdministratorDao dao = new AdministratorDao();
public String insertProductData(Context context, ProductDataBean[] productDataBeanArray){
String status = FAILED;
try{
dbLiteUtils = new DBLiteUtils(context);
dbLiteUtils.open();
status = dao.insertProductData(dbLiteUtils, productDataBeanArray);
} catch (Exception e){
e.printStackTrace();
} finally {
dbLiteUtils.close();
}
return status;
}
AdministratorDao.java
public class AdministratorDao {
private Cursor cursor;
//Insert Product Details into SQLite
public String insertProductData(DBLiteUtils dbLiteUtils, ProductDataBean[] productDataBeanArray){
String status = FAILED;
try {
if(productDataBeanArray.length > 0) {
//Delete Existing Data
dbLiteUtils.deleteAll("ProductMaster");
//Base Insert Query for inserting New Data into ProductMaster Table
String query = "INSERT INTO ProductMaster(ItemId, Description, Barcode, TransStatusCode) VALUES ";
//Iterate the productDataBeanArray in order to get productDataBean which contains a single product details
for (ProductDataBean productDataBean : productDataBeanArray) {
//Concatenate the Base Insert Query and the product details
query = query+"('"+productDataBean.getItemId().trim()+"', '"+productDataBean.getDescription().trim().replace("\'", "\'\'")+"', '"+productDataBean.getBarcode().trim()+"', '"+productDataBean.getTransStatusCode().trim()+"'),"; //.trim() removes unwanted empty spaces
}
//Remove the last comma from the iterated complete query
query = query.substring(0, query.length()-1);
//execute the query
dbLiteUtils.executeQuery(query);
//return success
status = SUCCESS;
}
} catch (Exception e){
e.printStackTrace();
}
return status;
}
这是我在 Visual Studio 中获取 json 数据的代码
public class ProductController : ApiController
{
public IEnumerable<Product> Get()
{
List<Product> pproducts;
using (estocktakeEntities entities = new estocktakeEntities())
{
pproducts = entities.Products.ToList();
//return entities.products.ToList();
}
return pproducts;
}
这是我的 json 示例
[{"invtid":"02007997","ib_itemcode1":"0","transstatuscode":"IN","descr":"潘婷 C/C 重症监护面膜 6 x 150m"}, {"invtid":"1","ib_itemcode1":"1","transstatuscode":"IN","descr":"object1"},{"invtid":"13101336","ib_itemcode1":"47400179172" ,"transstatuscode":"IN","descr":"Gillette Mach 3 Dispenser 8S (X12)"}, {"invtid":"13101473","ib_itemcode1":"47400179349","transstatuscode":"IN","descr":"Gillette Mach3 Cart 4S (X12)
如果需要更多信息,请告诉我,我会非常愿意上传。
感谢您的宝贵时间。
编辑 1
在尝试调试后,我遇到了这个错误,仍然不确定它是否有用,但这里是错误和与之相关的代码。
{"Message":"发生错误。","ExceptionMessage":"值不能为空。\r\n参数名称:实体","ExceptionType":"System.ArgumentNullException","StackTrace":"在 System.Data.Entity.Utilities.Check.NotNull[T](T value, String parameterName)\r\n 在 System.Data.Entity.DbSet`1.Add(TEntity entity)\r\n 在 ProductServiceFinal.Controllers .ProductController.Post(Product productrecord)"}
ProductController.Post
public HttpResponseMessage Post([FromBody] Product productrecord)
{
try
{
using (estocktakeEntities entities = new estocktakeEntities())
{
entities.Products.Add(productrecord);
//entities.Entry(productrecord).State = System.Data.Entity.EntityState.Modified;
entities.SaveChanges();
var message = Request.CreateResponse(HttpStatusCode.Created, productrecord);
message.Headers.Location = new Uri(Request.RequestUri + productrecord.invtid.ToString());
return message;
}
}
catch (Exception ex)
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex);
}
}
【问题讨论】:
-
你能用完整的 JSON 更新这个问题吗?
-
这似乎是一个 Gson 错误。你能检查这一行` ProductDataBean[] productDataBeanArray = gson.fromJson(formattedData, ProductDataBean[].class); `;试试
ProductDataBean.class而不是ProductDataBean[].class -
@PedroRodrigues 嗨,先生,我的完整杰森有 4000 多条记录。它是一样的,它会以 }] 结束。
-
@RustFisher 您好,先生,我尝试将其更改为 productDataBean 但是我的“状态 = administratorHelper.insertProductData(context, productDataBeanArray);”将导致错误。我会更新并显示所有链接
-
@phan 关于 SQLite,我猜
ContentResolver可能会有所帮助:)
标签: android json web-services sqlite