【问题标题】:How to get a php variable back to android app?如何将 php 变量返回到 android 应用程序?
【发布时间】:2017-06-29 19:29:48
【问题描述】:

我是在 Android Studio 中编程的新手,我正在尝试将我的应用程序连接到 Web 服务器上的 MySQL 数据库,echo "login success !!!!! Welcome $user"; 工作正常,正如我所希望的,但我想获得一个像 @987654322 这样的 PHP 变量@ 也回到我的 android studio 开发,以便我可以使用它在应用程序中进行会话,但我无法获取变量 我得到了回声,我在其他地方使用它来显示登录成功。需要帮助谢谢

    <?php
    require "pconn.php";
    $username = $_POST["username"];
    $password = $_POST["password"];

    $username = stripslashes($username);
    $password = stripslashes($password);

    $hash = md5($password);

    $qry = "SELECT * FROM UserLogin WHERE Email='".$username."' and BINARY Password ='".$hash."'";
   $result = mysqli_query($conn ,$qry);
   if(mysqli_num_rows($result) > 0) {
   $row = mysqli_fetch_assoc($result);
   $user = $row['Username'] ;
   echo "login success !!!!! Welcome $user";
   echo $user;
   }
   else {
   echo "login not success";
   }


   ?>

我的 Java 类是:

protected String doInBackground(String... params) {
        String type = params[0];
        String login_url = "http://xaas.com/login.php";
        if(type.equals("login")) {
            try {
                String username = params[1];
                String password = params[2];
                URL url = new URL(login_url);
                HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
                httpURLConnection.setRequestMethod("POST");
                httpURLConnection.setDoOutput(true);
                httpURLConnection.setDoInput(true);
                OutputStream outputStream = httpURLConnection.getOutputStream();
                BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
                String post_data = URLEncoder.encode("username","UTF-8")+"="+URLEncoder.encode(username,"UTF-8")+"&"
                        +URLEncoder.encode("password","UTF-8")+"="+URLEncoder.encode(password,"UTF-8");
                bufferedWriter.write(post_data);
                bufferedWriter.flush();
                bufferedWriter.close();
                outputStream.close();
                InputStream inputStream = httpURLConnection.getInputStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1"));
                String result="";
                String line="";

                while((line = bufferedReader.readLine())!= null) {
                    result += line;
                }



                bufferedReader.close();
                inputStream.close();
                httpURLConnection.disconnect();
                return result;
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

【问题讨论】:

  • How to get a php variable back to android studio? 错误的问题。我认为您希望在 Android 设备上运行的客户端应用程序中接收该变量的值。当您的应用在您或其他人的设备上运行时,它与 Android Studio 几乎没有关系。
  • @greenapps 我认为您的意思是它与 Android Studio完全没有关系

标签: java php android mysql


【解决方案1】:

使用printphp 控制台显示任何内容,使用echo 只是您想要作为响应发送到android 设备的部分。

或者,如果您也想发送"login success !!!!! Welcome $user" 字符串作为响应。然后在android端简单地获取$user的值。

您第一次执行echo 时将作为响应发送。如果你想发送多个字符串,然后构造一个 json,用你想发送的任何内容填充它,最后回显它。像这样的:

$data = [ 'loginMessage' => 'login success !!!!! Welcome $user', 'user' => '$user' ];
header('Content-type: application/json');
echo json_encode( $data );

然后使用JSONObject在android端取回值:

JSONObject responseJSON = new JSONObject(result);
String loginMessage = responseJSON.getString("loginMessage");
String userName = responseJSON.getString("user");

【讨论】:

  • 我需要两个回显,首先显示登录成功的祝酒词,另一个在我的应用程序中进一步使用。
  • 我现在理解了逻辑,你能帮我看看如何让它们回到安卓端吗?喜欢如何区分这些值?非常感谢
  • @YasarKhalid PHP 脚本应该只返回数据。然后,Android 应用应负责为 Toast 创建消息。不要依赖 PHP 脚本为 Android Toast 制作消息。
  • @AbhishekJain 你能否建议我在我的 Javaclass 中添加此 JSONObject 代码的位置?
  • @YasarKhalid 把它放在你的 while 循环之后,这个:while((line = bufferedReader.readLine())!= null)
【解决方案2】:

JSON 和 XML 都是将数据从 Web 服务器返回到移动应用程序的常用方法。

或者,直接在 Android EditTexts 中输入用户名和密码,然后将数据发送到 PHP 脚本。请注意您使用的是 HTTPS 而不是普通的 HTTP。

【讨论】:

  • 您能否解释一个在 Android Studio 中取回 $user 值的示例? :)
  • @YasarKhalid 我建议你学习如何在 PHP 中创建 JSON 对象。网上已经有很多关于如何做到这一点的例子。
【解决方案3】:

就像上面所有的答案一样,您需要将您的 php 输出回显为 json。 为此,您可以在 php 文件中尝试以下代码

$result["sessionID"] = $user;
$result["response_message"] = "Log in success!"
echo json_encode($result);

现在你必须解析你的 OutputStream 的结果,为此,你可以在你的 android 类中尝试以下代码

JSONObject jsonobj = new JSONObject([your variables that holds the result from output stream]);
String sessionID = jsonobj.getString("sessionID");
String response_message = jsonobj.getString("response_message");

请注意,您传递给 jsonobj.getString("sessionID") 的参数应该与您在声明变量 $response["sessionID"] 在 php 文件中。

我还建议您熟悉 JSON 语法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 2019-05-16
    • 2021-12-25
    相关资源
    最近更新 更多