使用Android应用程序中的按钮执行PHP脚本

时间:2016-02-20 18:23:52

标签: php android android-asynctask

我正在尝试使用两个按钮创建一个简单的应用程序,每个按钮都会在我的数据库上执行本地主机上的PHP脚本。到目前为止,我已经按预期运行了php脚本(在浏览器中测试):

<?php
require 'Connect.php'; // connects to DB

$query = "UPDATE tracker_database
SET tracker_logged_in = '1'
WHERE tracker_username = 'tracker01'";

if(mysqli_query($conn, $query))
{
    echo'Success';
} else {
    echo'not executed';
}
?>

这里我有应用程序的OnClickListener

public void addListenerOnExeBtn() {
    btn_exe = (Button) findViewById(R.id.btn_exe);
    btn_exe.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String link = "http://10.0.3.2/path/to/my/script.php"; //using this IP for Genymotion emulator
                    new updateData().execute(link);
                    Toast.makeText(MainActivity.this, "Executed", Toast.LENGTH_LONG).show();
                }
            }
    );
}

据我了解,您需要使用AsyncTask来访问脚本

private class updateData extends AsyncTask <String, Void, Void> {

    @Override
    protected Void doInBackground(String... params) {
        try {
            URL url = new URL(params[0]);
            HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
            urlConn.connect();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

所以我的问题是,当我运行我的应用程序并单击btn_exe时,它会打印出Toast&#34; Executed&#34;但是当我刷新我的数据库时没有任何变化,是的,我把

<uses-permission android:name="android.permission.INTERNET"/>

在我的AndroidManifest.xml中。我在logcat中找不到任何错误,没有错误,没有。有人有什么想法吗?

1 个答案:

答案 0 :(得分:1)

好的,所以我设法修复了问题并且它在updateData方法中,如果有人遇到同样的问题,这里是固定版本:

public class updateData extends AsyncTask<String, String, String> {

    @Override
    protected String doInBackground(String... params) {
        HttpURLConnection conn = null;

        try {
            URL url;
            url = new URL(params[0]);
            conn = (HttpURLConnection) url.openConnection();
            if( conn.getResponseCode() == HttpURLConnection.HTTP_OK ){
                InputStream is = conn.getInputStream();
            }else{
                InputStream err = conn.getErrorStream();
            }
            return "Done";
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(conn != null) {
                conn.disconnect();
            }
        }
        return null;
    }