之前从未接触过安卓和PHP服务器交互,无奈最近有一个项目必须要求和PHP登录服务器进行交互。
简单说来,我们所需要的就是POST数据给服务器,接收服务器返回的数据,这里我们不需要担心GET,只需要用一个JsonResponse对象来接收数据就行了。
首先,需要确定服务器接收的数据类型,起初我使用的一直是JsonObject,给其中添加key和value对,结果发现返回始终是failed,后来才知道应该添加form-data.在这里附上一个stackoverflow的链接:http://stackoverflow.com/questions/2938502/sending-post-data-in-android,其中old answer能解决我们的问题。
然而Google在Android 6.0以上移除了Apache HTTP Client,换言之,这个方法不兼容所有。
问题来了,如果我们需要兼容Android 6.0以上怎么办呢?
观察代码可以发现,BasicNameValuePair在安卓可以找到替代品,那就是Pair<String, String>,确实管用,不过UrlEncodedFormEntiy同样属于Apache HTTP Client,这样我们很难找到一个两全其美的办法来解决这个问题。
最终我的解决办法是,使用Volley来解决问题,先附上官方链接:https://developer.android.com/training/volley/index.html
Volley的通用性很好,同时针对不同的需求诸如Form-data所需要的key-value String pair还提供JsonObject的解决办法,这样我们就可以同时解决两方面的问题。
Android Volley的安装流程:
https://www.simplifiedcoding.net/android-volley-tutorial-to-get-json-from-server/
最后是一个Android Volley对于用户登录问题的一个小Demo:
https://www.simplifiedcoding.net/android-volley-post-request-tutorial/
需要注意的是,直接运行会出问题,因为StringRequest可能会出问题,自动调用GET时候使用的StringResquest,由于这次我们使用的是POST,所以可以将GET的部分注释掉。