【问题标题】:Select data from MySQL using android volley post request and display it in recyclerview使用android volley post请求从MySQL中选择数据并在recyclerview中显示
【发布时间】:2016-08-25 11:27:43
【问题描述】:

我想要的是,当某人(用户)单击主要活动上的按钮时,两个值将在 volley POST 请求的帮助下发送到 php 文件,比如 minvalue 和 maxvalue,它会从 mysql 中相应地选择数据数据库。

这是我的 POST 请求代码:

public void FilterPower(View view) {

    StringRequest stringRequest = new StringRequest(Request.Method.POST, Config.DATA_URL,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {

                    /*Some Method*/
                    /*Display data in recyclerview*/

                    //Initializing Views
                    recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
                    recyclerView.setHasFixedSize(true);
                    layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
                    recyclerView.setLayoutManager(layoutManager);

                    //Initializing our superheroes list
                    listSuperHeroes = new ArrayList<>();

                    //Calling method to get data
                    getData();

                    /*End Display data in recyclerview*/
                    /*End Some Method*/

                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(MainActivity.this, error.toString(), Toast.LENGTH_LONG).show();
                }
            }) {

        @Override
        protected Map<String,String> getParams() {
            Map<String, String> params = new HashMap<String, String>();

            params.put("minvalue", "1000");
            params.put("maxvalue", "2000");
            return params;
        }

    };

    RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
    requestQueue.add(stringRequest);

}

}

我的 PHP 文件代码:

<?php

$con = mysqli_connect("127.0.0.1","superinfoadmin","","superhero");
if (!$con)
{
    die('Could not connect: ' . mysql_error());
}

if($_SERVER['REQUEST_METHOD']=='POST'){

$minvalue       = $_POST['minvalue'];
$maxvalue       = $_POST['maxvalue'];

$result = mysqli_query($con, "SELECT * FROM superinfo, publisher WHERE superinfo.s_publisherid=publisher.p_id AND (s_power BETWEEN $minvalue AND $maxvalue)");

//$result = mysqli_query($con, "INSERT INTO testDB (min, max) VALUES ('$minvalue', '$maxvalue')");

while($row = mysqli_fetch_assoc($result))
{
    $output[]=$row;
}
print(json_encode($output));

mysqli_close($con);

}
?>

当我尝试使用上面的代码运行我的应用程序时,没有数据被选择并显示在 recyclerview 中。

但是当我尝试使用相同的变量在数据库中插入值时,值就会被插入。

我什至尝试同时保留 select 和 insert 语句以检查它是否进入“IF”循环,是的,它确实进入并在 DB 中插入值但不执行 select 语句。

但是,如果我给出一个 else 语句来选择所有数据并将其显示在 recyclerview 中,它可以正常工作,因此在 recyclerview 中显示数据没有问题,代码可以正常工作。下面是带有 else 语句的相同 PHP 代码:

if($_SERVER['REQUEST_METHOD']=='POST'){

$minvalue       = $_POST['minvalue'];
$maxvalue       = $_POST['maxvalue'];

$result = mysqli_query($con, "SELECT * FROM superinfo, publisher WHERE superinfo.s_publisherid=publisher.p_id AND (s_power BETWEEN $minvalue AND $maxvalue)");

//$result = mysqli_query($con, "INSERT INTO testDB (min, max) VALUES ('$minvalue', '$maxvalue')");

while($row = mysqli_fetch_assoc($result))
{
    $output[]=$row;
}
print(json_encode($output));

mysqli_close($con);

}
else{

$result = mysqli_query($con, "SELECT * FROM superinfo, publisher WHERE superinfo.s_publisherid=publisher.p_id");

while($row = mysqli_fetch_assoc($result))
{
    $output[]=$row;
}
print(json_encode($output));

mysqli_close($con);
}

请帮助我不知道我做错了什么或没有做什么。

【问题讨论】:

  • SELECT 声明看起来很可疑。我猜你需要在表之间创建一个JOIN,以获取它们共同的值。
  • $result 之前使用变量,例如$sql="SELECT * FROM superinfo, publisher WHERE superinfo.s_publisherid=publisher.p_id AND (s_power BETWEEN $minvalue AND $maxvalue)";
    echo $sql;
  • 检查输出的查询
  • @SanoojT 已尝试将查询存储在某个变量中,然后调用该变量但没有成功:(
  • 嗨@克里希纳!你能解决问题吗?

标签: php mysql json post android-volley


【解决方案1】:

我在您的代码中没有发现任何问题,但如果您有任何输出请检查此内容,请通知我

<?php
$con = mysqli_connect("127.0.0.1","superinfoadmin","","superhero");
if (!$con)
  {
    die('Could not connect: ' . mysql_error());
  }
if($_SERVER['REQUEST_METHOD']=='POST'){

 $minvalue       = $_POST['minvalue'];
 $maxvalue       = $_POST['maxvalue'];
 $sql="SELECT * FROM superinfo, publisher WHERE 
 superinfo.s_publisherid=publisher.p_id AND s_power BETWEEN '$minvalue' AND 
 '$maxvalue'";
 echo $sql;
 $result = mysqli_query($con,$sql);
 $output=array();
 $output = mysqli_fetch_assoc($result);
  print(json_encode($output));
  mysqli_close($con);
  }
  ?>

【讨论】:

  • 抱歉回复晚了,但上述方法无效。请帮忙。 @SanoojT
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-09
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多