手机App通过http协议从web服务器上获取json格式的数据

    本实验制作了一个手机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”。

你可能感兴趣的:(Android,开发)