本实验制作了一个手机app,该app通过http协议从web服务器上获取json格式的数据并显示。测试用的手机和web服务器在同一个wifi网络中,手机的IP地址为192.168.1.3,web服务器搭建在一个笔记本电脑上,IP地址为192.168.1.2。
一、搭建web服务器,步骤如下:
1.下载安装xampp(本机装在D:\xampp下)。
2.由于端口往往有冲突,所以需要对服务器使用的端口进行重新设置。打开 D:\xampp\apache\conf\httpd.conf文件,将Listen 80改成Listen 8888,将ServerName localhost:80 改成ServerName192.168.1.2:8888。这里192.168.1.2是笔记本电脑在wifi网络中的IP地址(在command窗口用ipconfig命令查看无线适配器的IP地址),因为app一会要在手机上测试,所以这里直接用IP地址,而不是localhost。
3.打开D:\xampp\apache\conf\extra\ httpd-ssl.conf文件,将Listen443改成 Listen 888。
4.打开xampp control panel,start apche服务器。在浏览器中输入:http://192.168.1.2:8888,如果能看见Xampp的欢迎界面,就说明服务器安装正常。
二、在D:\xampp\htdocs\forandroid目录下创建一个php文件如下:
<?php
$arr= array (‘a’=>’dd’,’b’=>’gg’,’c’=>’kk’,’d’=>’pp’,’e’=>’tt’);
echojson_encode($arr);
?>
该文件返回jason格式的数据:{“a”:”dd”,”b”:”gg”,”c”:”kk”,”d”:”pp”,”e”:”tt”}。
三、在Android studio中创建一个新的project,在主活动的页面上放置一个button和一个textview,当点击button时,向web 服务器发送http请求(请求上面创建的php文件),并对返回的json数据进行解析和显示(只显示了其中一个值)。代码如下:
public class
MainActivity
extends
AppCompatActivity
implements
View.OnClickListener{
private TextView
responseText;
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.
activity_main); Button sendRequest =(Button)findViewById(R.id.
send_request);
responseText= (TextView)findViewById(R.id.
textView); sendRequest.setOnClickListener(
this); }
@Override
public void onClick(Viewv) {
if(v.getId()==R.id.
send_request) { sendRequestWithHttpURLConnection(); } }
private voidsendRequestWithHttpURLConnection() {
new Thread(
new Runnable() {
public voidrun(){
try{ OkHttpClient client =
newOkHttpClient(); Request request =
newRequest.Builder().url(
“http://192.168.1.2:8888/forandroid/ jsontest.php”).build(); Response response =client.newCall(request).execute(); String responseData =response.body().string(); parseJSONWithJSONObject(responseData); }
catch(Exception e) { e.printStackTrace(); } } }).start(); }
private voidparseJSONWithJSONObject(String jsonData) {
try{ JSONObject jsonObject =
newJSONObject(jsonData);
finalString str = jsonObject.getString(
“c”);
runOnUiThread(
newRunnable(){
@Override
public voidrun() {
responseText.setText(
str); } }); }
catch (Exceptione){ e.printStackTrace(); } } }
四、运行该app,在手机上显示界面后,点击button,则在textview中显示“kk”。