0

我正在尝试从使用 xampp mysql 创建的 localhost 数据库中检索数据。

public class JASONUseActivity extends Activity {

    EditText byear; // To take birthyear as input from user
    Button submit;
    TextView tv; // TextView to show the result of MySQL query 

    String returnString; // to store the result of MySQL query after decoding JSON

    /** Called when the activity is first created. */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
            .detectDiskReads().detectDiskWrites().detectNetwork() // StrictMode is most commonly used to catch accidental disk or network access on the application's main thread
        .penaltyLog().build());
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        byear = (EditText) findViewById(R.id.editText1);
        submit = (Button) findViewById(R.id.submitbutton);
        tv = (TextView) findViewById(R.id.showresult);

        // define the action when user clicks on submit button
        submit.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                // declare parameters that are passed to PHP script i.e. the name birth year and its value submitted by user   
                ArrayList < NameValuePair > postParameters = new ArrayList < NameValuePair > ();

                // define the parameter
                postParameters.add(new BasicNameValuePair("birthyear", byear.getText().toString()));
                String response = null;

                // call executeHttpPost method passing necessary parameters 
                try {
                    response = CustomHttpClient.executeHttpPost("http://localhost/jasonscript.php", postParameters);

                    // store the result returned by PHP script that runs MySQL query
                    String result = response.toString();  

我无法在 textview 中查看数据。网址对吗??

这是位于 xampp/htdocs 中的 jasonscript.php

<?php
$db_host = "localhost";

$db_uid = "root";

$db_pass = "";

$db_name = "";

$db_con = mysql_connect($db_host, $db_uid, $db_pass) or die('could not connect');
mysql_select_db($db_name);
$sql    = "SELECT * FROM people WHERE birthyear > '" . $_POST["birthyear"] . "'";
$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result))
    $output[] = $row;
print(json_encode($output));
mysql_close();
?>

我已在清单文件中授予 Internet 权限。

提前致谢。

4

2 回答 2

1

localhost在设备上指的是其环回接口,而不是托管您尝试连接的数据库的开发机器。为了让虚拟设备连接到您的开发机器的环回接口,您需要使用10.0.2.2. 您可以将您的 URL 更改为类似这样的内容以访问您的开发机器:

CustomHttpClient.executeHttpPost("http://10.0.2.2/jasonscript.php", postParameters);

有关模拟器网络如何工作的更多详细信息,请参阅我的答案。

于 2014-12-31T19:25:10.383 回答
0

当您localhost在 Android 设备上使用时,您指的是设备本身上的服务。使用服务器的 IP / 主机名来获取数据。

旁注:还要查看ASyncTask 这里,因为在 onCreate 中下载数据会锁定您的 UI 线程(如果需要很长时间)并可能导致App Not Respondingor Force Close。即使它没有崩溃,用户体验也会因为应用程序没有响应而下降。

于 2013-05-08T06:50:50.560 回答