所以,我知道这似乎是一个重复的问题,但请耐心等待一下。在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>
答案 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>
,也可以从服务器响应中删除它们。