使用简单的可运行线程从android studio中的php获取结果,而无需任何外部库

时间:2018-09-06 14:17:48

标签: java php android sql-server

所以,我知道这似乎是一个重复的问题,但请耐心等待一下。在Android Studio中,我计划使用简单的可运行线程,而不是使用任何外部库(即,没有JSON,没有Volley,没有Retrofit,没有任何外部资源)。这些将使用存储在本地主机上的PHP通过系统使用的WiFi的IP地址获取数据。

我知道如何发送PHP更新(实际的更新代码在PHP脚本中),是这样完成的:

Runnable runnableToUpdateDb = new Runnable() {
    @Override
    public void run() {
        Log.d("DEBUG","RUNNING RUNNABLE");
        try {
            URL url = new URL("http://192.168.43.242/myapi/php_name.php");
            HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.connect();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));
            String response = bufferedReader.readLine();
            Log.d("DEBUG", response);
            httpURLConnection.disconnect();
         }catch (Exception e){
             Log.d("DEBUG",e.toString());
         }
    }
};

然后只需按以下按钮,即可使用线程运行PHP:

Thread threadToUpdateDb = new Thread(runnableToUpdateDb);
threadToUpdateDb.start();

现在,问题在于设置一个TextView,它通过不同的PHP显示来自数据库的更新/新数据。

我在布局中为此TextView描述的ID是:

android:id="@+id/getdata"

我需要在MainActivity中实现它的帮助。

PHP的输出格式为:

<br>8<br>

1 个答案:

答案 0 :(得分:0)

以下是使用普通Android对URL执行HTTP GET的方法。在这种情况下,我选择一个AsyncTask,以便它将在主线程之外运行请求:

private class TareaGetFromDB extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... params) {
        String URL = params[0];
        String response = null;

        try {
            // Create an HTTP client
            HttpClient client = new DefaultHttpClient();
            HttpGet post = new HttpGet(URL);
            // Perform the request and check the status code
            HttpResponse response = client.execute(post);
            StatusLine statusLine = response.getStatusLine();
            if(statusLine.getStatusCode() == 200) {
                // code 200 equals HTTP OK
                HttpEntity entity = response.getEntity();
                InputStream content = entity.getContent();
                try {
                    response = IOUtils.toString(content, "utf-8");

                } catch (Exception ex) {
                    // TODO handle exception
                }
            }
        } catch(Exception ex) {
            // TODO handle exception
        }
        return response;
    }
    @Override
    protected void onPostExecute(String response) {
        TextView myTextView = findViewById(R.id.getdata);
        myTextView.setText(response);
    }
}

此AsyncTask以一个String(URL)作为参数,并返回一个String(响应)。

因此,您需要这样称呼它:

new TareaGetFromDB().execute("http://url.to/get/data");

在将文本设置为TextView之前,您可能需要进行其他工作才能删除<br>,也可以从服务器响应中删除它们。