本实验制作了一个手机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文件如下:
$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”。