【问题标题】:Problem passing parameters from android to php从android传递参数到php的问题
【发布时间】:2021-06-02 13:58:54
【问题描述】:

我的 android 应用程序在使用 volley 发送参数时出现问题,我必须显示登录到我的应用程序的用户的数据,数据在服务器中,在我的 php 中我用 Json 返回它,它可以工作当我在php中发送参数时很好,但是在凌空getParams中没有发送我的全局变量的值。

附上代码:

MainLista.java 这里我读的是Json

public class MainLista extends AppCompatActivity {

    TextView txt1;
    ListView listaPerfil;
    ArrayAdapter adapter;
    HttpURLConnection con;

    String LINK = "phpurl";
    String url = LINK + "?email=" + Globales.USER_EMAIL + "?pass=" + Globales.USER_PASS;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_lista);
        listaPerfil = findViewById(R.id.listaPerfil);

        txt1 = findViewById(R.id.txt1);

        txt1.setText("email: " + Globales.USER_EMAIL + "\nPASS: " + Globales.USER_PASS);

        StringRequest sr = new StringRequest(Request.Method.POST, url, response -> { }, error -> {

            Toast.makeText(this, "ERROR", Toast.LENGTH_SHORT).show();

        }) {
            @Override
            protected Map<String, String> getParams() {

                Map<String, String> params = new Hashtable<>();
                params.put("email", Globales.USER_EMAIL);
                params.put("contrasena", Globales.USER_PASS);

                Log.d("IMPRESION", Globales.USER_EMAIL);
                Log.d("IMPRESION", Globales.USER_PASS);

                return params;
            }
        };

        RequestQueue rq = Volley.newRequestQueue(this);
        rq.add(sr);

        try {
            ConnectivityManager connMgr =(ConnectivityManager)
                    getSystemService(Context.CONNECTIVITY_SERVICE);

            NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();

            if (networkInfo != null && networkInfo.isConnected()) {

                new JsonTask().execute(new URL("phpurl"));

            } else {

                Toast.makeText(this, "ERROR DE CONEXION", Toast.LENGTH_LONG).show();

            }

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

    private class JsonTask extends AsyncTask<URL, Void, List<Datos>> {

        @Override
        protected List<Datos> doInBackground(URL... urls) {
            List<Datos> datos = null;

            try {
                con = (HttpURLConnection)urls[0].openConnection();
                con.setConnectTimeout(15000);
                con.setReadTimeout(10000);

                int statusCode = con.getResponseCode();

                if (statusCode != 200) {
                    datos = new ArrayList<>();
                    datos.add(new Datos("error", null, null, null, null, null, null));
                } else {
                    InputStream in = new BufferedInputStream(con.getInputStream());

                    JsonParser parser = new JsonParser();

                    datos = parser.leerFlujoJson(in);
                }

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                con.disconnect();
            }
            return datos;
        }

        @Override
        protected void onPostExecute(List<Datos> datos) {
            if (datos != null) {
                adapter = new AdaptadorDatos(MainLista.this, datos);
                listaPerfil.setAdapter(adapter);

            } else {
                Toast.makeText(getBaseContext(), "ERROR DE PARSING JSON", Toast.LENGTH_LONG).show();
            }
        }
    }
}

php:

<?
    session_start();
    include('Conexion2.php');

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

    $email  = $_GET['email'];
    $pass   = $_GET['contrasena'];

    $sql="SELECT c.nombre, c.apellido, c.telefono1, c.email, c.fechanacimiento, c.contrasena, f.imagen
            FROM clientes AS c
            INNER JOIN fotos AS f ON c.clienteid = f.clienteid
            WHERE c.email = '$email' AND c.contrasena = '$pass'";

$pdo = pdo();
$query = $pdo -> prepare($sql);
$query -> execute(array($cons));
$res = $query -> fetchAll(PDO::FETCH_ASSOC);
$json = json_encode($res);

echo $json;
    }
?>

从 php 获取 Json:

[{"nombre":"Fernando","apellido":"Villarreal","telefono1":"8672554040","email":"ricardito@gmail.com","fechanacimiento":"2021-02-11","contrasena":"12345678","imagen":"https:**********/FP-aYRsz-891.png"}]

【问题讨论】:

  • 嗨。 Toast 向您显示错误消息?
  • @ShayKin 嗨,是的,目前刚刚获得“解析 Json 时出错”

标签: php android android-volley


【解决方案1】:

在您的 PHP 代码中,您使用 GET 方法,而在 Volley 中,您使用 POST,因此您可以选择 2 将您的 php 更改为:

<?
    session_start();
    include('Conexion2.php');



    $email  = $_POST['email'];
    $pass   = $_POST['contrasena'];

    $sql="SELECT c.nombre, c.apellido, c.telefono1, c.email, c.fechanacimiento, c.contrasena, f.imagen
            FROM clientes AS c
            INNER JOIN fotos AS f ON c.clienteid = f.clienteid
            WHERE c.email = '$email' AND c.contrasena = '$pass'";

$pdo = pdo();
$query = $pdo -> prepare($sql);
$query -> execute(array($cons));
$res = $query -> fetchAll(PDO::FETCH_ASSOC);
$json = json_encode($res);

echo $json;
    
?>

或将 Volley 代码更改为:

 StringRequest sr = new StringRequest(Request.Method.GET, url, response -> { }, error -> {

        Toast.makeText(this, "ERROR", Toast.LENGTH_SHORT).show();

    
    });
    
}

您还需要将您的链接更改为:

 String LINK = "https://viavel.com.mx/pruebas/PHPRicardo/ejemplomostrar.php"; 
 String url = LINK + "?email=" + Globales.USER_EMAIL + "&pass=" +Globales.USER_PASS;

对于GET方法中的多个值,必须在值之间添加'&'

【讨论】:

  • 实际上,是的,但我想问题出在 AsyncTask 和我的 dataAdapter 中
  • 我给你一个建议。我看到您在这种情况下发送电子邮件和密码,最安全的方法是使用 POST 方法,使用 Get 方法在链接上共享密码是不切实际的
猜你喜欢
  • 2023-03-24
  • 1970-01-01
  • 2014-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多