我正在尝试使用两个按钮创建一个简单的应用程序,每个按钮都会在我的数据库上执行本地主机上的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中找不到任何错误,没有错误,没有。有人有什么想法吗?
答案 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;
}