我有一个php文件,它从特定列中获取所有行。然后将结果放入数组中,然后进入json_encoded。当我向php文件中输出Toast时,它会显示一个具有正确值的JSON字符串。我需要将其转换为Java String数组,以便我可以通过点击按钮逐个遍历它
我在这里尝试了多种解决方案,但无济于事,所以任何帮助都将不胜感激!
getImage.php
$sql = "SELECT advert_File_Path FROM Ads";
$result = $mysql_con->query($sql) or die('Query problem: '.mysqli_error($mysql_con));
//create array
$resultarray = array();
while($row = mysqli_fetch_assoc($result)){
$resultarray[] = $row;
}
echo json_encode($resultarray);
MainActivity.java(只有相关的代码)
private void loadNextAdvert()
{
Toast.makeText(this, "Please wait, image may take a few seconds to load...", Toast.LENGTH_LONG).show();
dbhelper = (DbHelper) new DbHelper(new DbHelper.AsyncResponse() {
@Override
public void processFinish(String output) {
if(output.equalsIgnoreCase("exception") || output.equalsIgnoreCase("unsuccessful")){
Toast.makeText(MainActivity.this, "Connection error", Toast.LENGTH_SHORT).show();
}else{
//initializes ArrayList
stringList = new ArrayList<>();
try {
//initializes JSONArray with output from php getImage file
jsonArray = new JSONArray(output);
if(jsonArray != null){
int len = jsonArray.length();
for(int i=0; i<len; i++){
stringList.add(jsonArray.get(i).toString());
}
}
} catch (JSONException e) {
e.printStackTrace();
}
Toast.makeText(MainActivity.this, String.valueOf(stringList), Toast.LENGTH_LONG).show();
}
}
}).execute(loadPic);
}
应该显示ArrayList内容的Toast只显示为&#39; []&#39;。
答案 0 :(得分:1)
管理自己解决它。
所以这里,
步骤1.我必须从我的php文件中删除注释代码,因为它突然以某种方式突破,这是来自JSON数组末尾的那些。
步骤2.我不得不从我用于错误检查的php文件中删除一个额外的echo。我想我说你想要的唯一回音就是json_encode。
步骤3.检查Java中JSONarray的长度,它记录了5,所以我现在知道它正确读取了。
第4步。添加了Pavneet_Singh的代码段,将stringList.add(jsonArray.get(i).toString());
替换为stringList.add(jsonArray.getJSONObject(i).optString("advert_File_Path"));
步骤5.使用此代码stringArray = new String[stringList.size()];
stringArray = stringList.toArray(stringArray);
将StringList从ArrayList转换为String数组
快乐的时光!我花了很长时间试图解决这个问题哈哈,前两个步骤是相当愚蠢的,但它有时是生活中最难找到的最明显的事情。希望这也可以帮助其他人!
答案 1 :(得分:0)
使用stringList.add(jsonArray.getString(i));
答案 2 :(得分:0)
试试这个:
JSONArray arr = new JSONArray(putNesessaryValueHere);
List<String> list = new ArrayList<String>();
for(int i = 0; i < arr.length(); i++){
list.add(arr.getJSONObject(i).getString("name"));
}
答案 3 :(得分:0)
Try this :
ArrayList<String> arrayList = new ArrayList<String>();
JSONArray jsonArray = new JSONArray();
for(int i = 0, count = jsonArray.length(); i< count; i++)
{
try {
JSONObject jsonObject = jsonArray.getJSONObject(i);
arrayList.add(jsonObject.toString());
}
catch (JSONException e) {
e.printStackTrace();
}
}