gpt4 book ai didi

java - 使用 JSON 将数组传递给 Android 应用程序

转载 作者:行者123 更新时间:2023-11-29 20:54:20 24 4
gpt4 key购买 nike

我已经尝试了这里找到的所有解决方案,但似乎没有一个对我有用。我是 Android 新手,这是我的问题。

我有这个 PHP 脚本,它获取 MySql 数据并将其传递到数组中

<?php

$con = mysqli_connect("localhost", "username", "passwod", "database");
$result = array();
$getacceptedsotres = mysqli_query($con, "SELECT * FROM offer WHERE
type='sale' AND approved = 'approved'");
while($rowgetid = mysqli_fetch_assoc($getacceptedsotres)){

$storeid = $rowgetid['id'];

$getstores = mysqli_query($con, "SELECT * FROM sale WHERE offerid =
'$storeid' ");

while($row = mysqli_fetch_assoc($getstores)){

array_push($result,array(
'title'=>$row['title'],
'offerto' => $rowgetid['offerto'],
'type' => $rowgetid['type'],
'percentageoff'=>$row['percentageoff']

));

}
}

echo json_encode(array($result));

当执行 PHP 脚本时,它会给出以下内容:

[[{"title":"40% off on all drinks","offerto":"06/29 /2016","type":"sale","percentageoff":"40%"},{"title":"30% sale on selected >items","offerto":"07/31/2016","type":"sale","percentageoff":"30%"}, {"title":"45% off on selected items","offerto":"07/08 /2016","type":"sale","percentageoff":"45"}]]

我的问题是当我想将此结果传递到 android studio 中的列表时。

这是我的类里面使用的代码

公共(public)类 Sale 扩展 AppCompatActivity 实现 AsyncResponse {

private ArrayList<GetSale> saleList;
private ListView lvSale;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sale);

ImageLoader.getInstance().init(UILConfig.config(Sale.this));

PostResponseAsyncTask taskRead = new PostResponseAsyncTask(Sale.this, this);

taskRead.execute("http://....php");




}

@Override
public void processFinish(String s) {

saleList = new JsonConverter<GetSale>().toArrayList(s, GetSale.class);
BindDictionary<GetSale> dict = new BindDictionary<GetSale>();


dict.addStringField(R.id.tvSaleAmount, new StringExtractor<GetSale>() {
@Override
public String getStringValue(GetSale getSale, int position) {
return getSale.title;
}
});

dict.addStringField(R.id.tvType, new StringExtractor<GetSale>() {
@Override
public String getStringValue(GetSale getSale, int position) {
return getSale.type;
}
});

FunDapter<GetSale> adapter = new FunDapter<>(
Sale.this, saleList, R.layout.layout_sale, dict );

lvSale = (ListView)findViewById(R.id.lvSale);
lvSale.setAdapter(adapter);


}

}

因此,当我运行应用程序并尝试列出从 PHP 脚本获得的结果时,我在 android studio 中收到了很长的错误,但我认为这是导致错误的主线

>06-10 17:34:17.262 28516-28516/com.example.W/System.err: 
>com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected
>BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 3
>06-10 17:34:17.262 28516-28516/com.example.W/System.err: at
>com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(Reflect>iveTypeAdapterFactory.java:176)
>06-10 17:34:17.262 28516-28516/com.example.W/System.err: at
>com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRun>timeTypeWrapper.java:40)

>.
>.
>.

>06-10 17:34:17.272 28516-28516/com.example.W/System.err: ... 21 more
>06-10 17:34:17.282 28516-28516/com.example.E/ViewRootImpl: >sendUserActionEvent() mView == null

如有任何帮助,我们将不胜感激。预先感谢您

最佳答案

换行

echo json_encode(array($result));

echo json_encode($result); 在您的 PHP 代码中。

$result 已经是一个数组,就像您在开始时的 $result = array(); 一样。通过执行son_encode(array($result)),您可以将一个数组对象集成到另一个数组中。

注意 JSON 响应开头的 [[。正是因为如此。在 Android 端,您只反序列化外部数组。这就是为什么您会遇到预期 BEGIN_OBJECT 但出现 BEGIN_ARRAY 异常。

关于java - 使用 JSON 将数组传递给 Android 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37751552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com