【问题标题】:I want to show names of people on the listview in android through json我想通过json在android的listview上显示人名
【发布时间】:2018-01-28 11:57:28
【问题描述】:

我正在使用 asynctask,我想通过它获取名称的 json 数组并希望在 listview 中显示。 这是我的php代码:

    $con=mysqli_connect("localhost","root","","raheel");

    $id=intval($_POST['id']);

   $mysqli_qry="select* from name where Name_id='$id'; ";


   $result=mysqli_query($con,$mysqli_qry)or die("Error Occur in Connection" . mysqli_error($con));

  $rowcount=mysqli_num_rows($result);

    $arr=Array();

    if($rowcount>0)
{

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


        $arr=$row;

    }



}
header('Content-Type: application/json');
echo json_encode($arr); 
mysqli_close($con

?>

我面临的问题是我将如何在异步任务模式下获取 json 数组并将数据(名称)分配给列表视图 这是我的 Home.java 代码: 包 com.example.raheel.bank;

public class Home extends AppCompatActivity implements HomeCallBack {

ListView listView;
private ListAdapter mAdapter;

 p public ArrayList<String > info;

@Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);




    listView=(ListView)findViewById(R.id.Listview);


    int id=0;










}
BackgroundHome home=new BackgroundHome(Home.this, (Callback)Home. this);
@Override
public void processData(JSONArray data)
{

            if(data!=null)
            {
                info=new ArrayList<>();
                try
                {


                    for(int i=0;i<data.length();i++)
                    {

                        JSONObject js=data.getJSONObject(i);
                    }




                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
    mAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,info);
    listView.setAdapter(mAdapter);



}

}

 class BackgroundHome extends AsyncTask<Integer,Integer,JSONArray>{



Context c;
Callback callback;

public BackgroundHome(Context c, Callback callback) {
    this.c = c;
    this.callback = callback;
}

@Override
protected JSONArray doInBackground(Integer...params) {

    JSONArray js=null;

    String url=c.getString(R.string.url) +"Home.php";

    try {
        HttpRequest httpRequest = new HttpRequest(url);
        HashMap<String, String> values = new HashMap<>();
        values.put("id", Integer.toString(params[0]));
        js = httpRequest.prepare(HttpRequest.Method.POST).withData(values).sendAndReadJSONArray();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return js;
}

protected void onPostExecute(JSONArray jsonArray){

    HomeCallBack.processData(jsonArray);
}







}


interface HomeCallBack{

public void processData(JSONArray data);

 }

这是 Home.java 文件,但我不知道如何从 php 文件中获取名称的 json 数组。

【问题讨论】:

  • 上面的代码能用吗?听起来您的问题不在于 PHP 部分,而在于 Android 列表视图部分?
  • 是的,我有一个用于测试的 html 文件,当我将 Name_id 放入其中时,它会显示关于该 id 的唯一名称
  • 那么您应该更新您的问题并显示您实际遇到问题的代码。没有理由向我们展示有效的代码。问题应该是:“如何使用 json 数组中的数据填充列表视图”。它来自 PHP 的事实与问题无关。
  • 这里是java代码@MagnusEriksson

标签: php android json listview android-asynctask


【解决方案1】:

您必须像这样将数据添加到数组中。将 $arr = $row 修改为 $arr[] = .. 将为您提供带有键/值数据的结果数组。 json_encode 稍后在您的代码中将转换为应用程序所需的 json 数组。

while($row=mysqli_fetch_assoc($result))
       {
            $arr[] = array('name' => $row["Name"], 'id' => $row["Name_id"]);

       }

【讨论】:

  • 不,没有错误,因为我从我的 html 表单中测试它会给出结果,因为我把 id 给它给出结果 {"Name_id":"10","Names":"Raheel"} 喜欢这个@Dian Nedelchev
【解决方案2】:

你在最后一行代码有错误,你没有关闭括号

mysqli_close($con); // in your code => mysqli_close($con

并更新您的 while 循环,如下所示:

$arr[] = $row;

【讨论】:

  • @RaheelSajjad 你没有关闭括号
  • php 没有错误。我的问题是如何在 java 中获取 json 数组? php 给了我正确的结果,例如 {"Name_id":"10","Names":"Raheel"} 这个@aidinMC
  • 在你的 php 代码中它只返回最后一行@RaheelSajjad
猜你喜欢
  • 2016-08-19
  • 2021-10-22
  • 2019-02-07
  • 1970-01-01
  • 2013-01-09
  • 2017-08-13
  • 2020-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多