【问题标题】:Displaying tables and colums from online database in Android Studio在 Android Studio 中显示在线数据库中的表和列
【发布时间】:2016-05-25 10:33:47
【问题描述】:

我在 Android Studio 中设计了一个具有成功登录和注册系统的应用程序。我在hosting24上托管我的数据库。

我需要从数据库中提取数据并将其显示在应用程序的屏幕上。

任何人都可以建议如何做吗?我为这个应用程序编写了一堆代码,所以我会发布任何关于需要查看哪些代码的建议。我不太确定我需要在这里发布什么代码..

如果教师登录应用程序,他们将看到已注册学生的列表以及与这些学生相关的相应数据。

<?php
$con = mysqli_connect("host", "username", "pw", "db");

$FirstName = $_POST["FirstName"];
$LastName = $_POST["LastName"];



$statement = mysqli_prepare($con, "SELECT * FROM Student");
mysqli_stmt_bind_param($statement, "ss",$FirstName, $LastName);
mysqli_stmt_execute($statement);


$response = array();
$response["success"] = false;  

while(mysqli_stmt_fetch($statement)){
    $response["success"] = true;  
    $response["FirstName"] = $FirstName;
    $response["LastName"] = $LastName;
}

echo json_encode($response);

?>

这是我的java代码

public class UserAreaActivity extends AppCompatActivity implements View.OnClickListener{
Button fetch;
TextView text;
EditText et;
HttpURLConnection urlConnection = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_user_area);

    fetch= (Button) findViewById(R.id.fetch); //XML Button to get the data
    fetch.setOnClickListener(this);
}

class task extends AsyncTask<String, String, Void>
{
    private ProgressDialog progressDialog = new ProgressDialog(UserAreaActivity.this);
    InputStream is = null ;
    String result = "";
    protected void onPreExecute() {
        progressDialog.setMessage("Fetching data...");
        progressDialog.show();
        progressDialog.setOnCancelListener(new OnCancelListener() {
            @Override
            public void onCancel(DialogInterface arg0) {
                task.this.cancel(true);
            }
        });
    }
    @Override
    protected Void doInBackground(String... params) {
        try {
            URL url = new URL("MY PHP URL");
            urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.connect();
            is = urlConnection.getInputStream();
        } catch (Exception e) {
            Log.e("log_tag", "Error in http connection "+e.toString());
        }
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            StringBuilder sb = new StringBuilder();
            String line = "";
            while((line=br.readLine())!=null)
            {
                sb.append(line+"\n");
            }
            is.close();
            result=sb.toString();

        } catch (Exception e) {
            // TODO: handle exception
            Log.e("log_tag", "Error converting result "+e.toString());
        }

        return null;

    }
    protected void onPostExecute(Void v) {

        // ambil data dari Json database
        try {
            JSONArray Jarray = new JSONArray(result);
            for(int i=0;i<Jarray.length();i++)
            {
                JSONObject Jasonobject = null;
                Jasonobject = Jarray.getJSONObject(i);

                //get an output on the screen
                String firstName = Jasonobject.getString("FirstName");
                String db_detail="";

                if(et.getText().toString().equalsIgnoreCase(firstName)) {
                    db_detail = Jasonobject.getString("detail");
                    text.setText(db_detail);
                    break;
                }
            }
            this.progressDialog.dismiss();

        } catch (Exception e) {
            // TODO: handle exception
            Log.e("log_tag", "Error parsing data "+e.toString());
        }
    }
}

结果是它一直在为我获取数据。我只需要一个名字列表就可以打印到屏幕上

【问题讨论】:

    标签: java php mysql xml android-studio


    【解决方案1】:

    首先,您需要创建一个服务器端文件,该文件可以从数据库中获取数据并将其发布为 JSON(或其他格式,如果您愿意)

    <?php
    // Code to connect to database
    // fetch and process the data 
    // print json echo json_encode($output)
    ?>
    

    假设上面的php文件在http://example.com/process.php

    在 Android 中,您需要向您之前创建的 JSON API(http://example.com/process.php)发出异步 HTTP 请求。一种方法是使用 AsyncHttpClient 来获取数据

    public void loadFromWeb(){
    
                RequestParams params = new RequestParams();
                AsyncHttpClient client = new AsyncHttpClient();
                params.put("parameter", data);
    
                client.post("http://example.com/process.php", params, new JsonHttpResponseHandler() {
                    @Override
                    public void onStart() {
    
                    }
    
                    @Override
                    public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                        try {
                            //process the response
    
                            //Do what you want with data, display in your layout
    
                        } catch (Exception e) {
                            //catch exception
                        }
                    }
    
                    @Override
                    public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
                        // Process failure
                    }
    
                });
    }
    

    您可能想为此阅读更多关于 AsyncHttpClient 的信息。

    或者你可以看看其他方法来进行异步调用,一个这样的库是RetroFit

    【讨论】:

    • 您需要异步执行 http 请求,但您不需要为此使用 AsyncHttpClient 库。有很多替代方案(改造是一种流行的方案,IMO 在涉及 JSON RESTful api 时更易于使用)。
    • 正确,这只是其中一种方法
    • 感谢 cmets。谁能告诉我为什么我的代码挂了?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    • 2019-02-10
    • 2017-03-24
    • 1970-01-01
    相关资源
    最近更新 更多