当先锋百科网

首页 1 2 3 4 5 6 7
在现代互联网的开发中,Android系统的手机应用和web服务的结合已经几乎是司空见惯的了。而对于后端的web服务来说,PHP无疑是一个最常见的语言。那么,如何在Android应用中调用PHP服务呢?以下将会对这个问题进行深入的探讨。 首先,我们需要明确的是,Android应用和PHP服务之间的通信需要通过HTTP协议实现。换句话说,我们需要了解如何通过Android的网络API(主要是HttpURLConnection和HttpClient两个类)与PHP后端进行交互。以下是一个使用HttpURLConnection的GET请求的例子:
HttpURLConnection connection = null;  
BufferedReader reader = null;  
try {  
URL url = new URL("http://www.example.com/sample.php?key=value");  
connection = (HttpURLConnection) url.openConnection();  
connection.setRequestMethod("GET");  
connection.setConnectTimeout(5000);  
connection.setReadTimeout(5000);  
connection.connect();  
InputStream inputStream = connection.getInputStream();  
reader = new BufferedReader(new InputStreamReader(inputStream));  
StringBuilder response = new StringBuilder();  
String line;  
while ((line = reader.readLine()) != null) {  
response.append(line);  
}  
Log.d(TAG, "response: " + response.toString());  
} catch (Exception e) {  
e.printStackTrace();  
} finally {  
if (reader != null) {  
try {  
reader.close();  
} catch (IOException e) {  
e.printStackTrace();  
}  
}  
if (connection != null) {  
connection.disconnect();  
}  
}
在上面的代码中,我们向“http://www.example.com/sample.php?key=value”发送了一个GET请求,并将服务器返回的响应输出到Android控制台。当然,你可以根据自己的需要修改请求的类型和请求参数,并将响应输出到你的应用界面上。 以上代码只是发送了一个普通的GET请求,如果你需要提交一些表单数据或者上传一些文件,那么你需要使用POST请求。以下是一个使用HttpClient的POST请求的例子:
HttpClient httpClient = new DefaultHttpClient();  
HttpPost httpPost = new HttpPost("http://www.example.com/upload.php");  
MultipartEntityBuilder builder = MultipartEntityBuilder.create();  
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);  
File file = new File(Environment.getExternalStorageDirectory(), "test.jpg");  
builder.addBinaryBody("file", file, ContentType.create("image/jpeg"), "test.jpg");  
builder.addTextBody("key", "value");  
httpPost.setEntity(builder.build());  
HttpResponse response = httpClient.execute(httpPost);  
HttpEntity entity = response.getEntity();  
if (entity != null) {  
Log.d(TAG, "response: " + EntityUtils.toString(entity));  
}
在上面的代码中,我们向“http://www.example.com/upload.php”发送了一个POST请求,并将表单数据和上传的文件打包在了MultipartEntity中。当然,你也可以根据自己的需要修改请求的类型和请求参数。 不过,需要注意的是,因为Android中的网络操作需要在子线程中进行,所以最好使用异步任务来完成网络请求。以下是一个使用AsyncTask的例子:
private class HttpTask extends AsyncTask{  
@Override  
protected String doInBackground(String... strings) {  
HttpURLConnection connection = null;  
BufferedReader reader = null;  
try {  
URL url = new URL(strings[0]);  
connection = (HttpURLConnection) url.openConnection();  
connection.setRequestMethod(strings[1]);  
connection.setConnectTimeout(5000);  
connection.setReadTimeout(5000);  
connection.connect();  
InputStream inputStream = connection.getInputStream();  
reader = new BufferedReader(new InputStreamReader(inputStream));  
StringBuilder response = new StringBuilder();  
String line;  
while ((line = reader.readLine()) != null) {  
response.append(line);  
}  
return response.toString();  
} catch (Exception e) {  
e.printStackTrace();  
} finally {  
if (reader != null) {  
try {  
reader.close();  
} catch (IOException e) {  
e.printStackTrace();  
}  
}  
if (connection != null) {  
connection.disconnect();  
}  
}  
return null;  
}  
@Override  
protected void onPostExecute(String response) {  
if (response != null) {  
Log.d(TAG, "response: " + response);  
}  
}  
}
在上面的代码中,我们定义了一个HttpTask类,该类继承自AsyncTask并重写了doInBackground和onPostExecute方法。在doInBackground方法中完成了网络请求,并将服务器返回的响应作为结果返回。在onPostExecute方法中处理网络请求的结果。当然,你也可以根据自己的需要重写其它的生命周期方法。 总之,Android调用PHP服务可以通过HTTP协议实现。在具体的实现过程中,我们需要使用Android的网络API(主要是HttpURLConnection和HttpClient两个类),同时需要注意子线程中进行网络请求,最好使用异步任务完成整个过程。