在Android Studio

时间:2016-05-25 10:33:47

标签: java php mysql xml android-studio

我在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);

&GT;

这是我的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());
        }
    }
}

结果就是它在为我提取数据时挂起。我只需要一个名单列表打印到屏幕

1 个答案:

答案 0 :(得分:0)

首先,您需要创建一个服务器端文件,该文件可以从数据库中获取数据并将其发布为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请求(位于http://example.com/process.php)。一种方法是使用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