要求:
Android编写一个登录界面,输入用户名和密码,使用JSON格式提交到服务器端。
服务器端收到后返回(JSON格式数据):
“输入的用户”+您好,你已成功登录系统。
“输入的用户”+您好,你已成功登录系统。
其实不管是JSON还是其他类型,都是为了满足Android与服务器端的程序进行数据交换的要求而已
本次笔记的个人觉得
重点如下:
1.服务器端的数据接收
1)包括数据编码的设定
发送与接受最好都用utf-8来设定编码来
在doPost中加入Response声明
response.setCharacterEncoding("UTF-8");
response.setContentType("UTF-8");
2)了解异步线程的用途与如何用异步线程AsyncTask 来更新UI
首先,什么时候需要用到异步线程呢,在需要进行对网络发送接收稍大量的数据的时候,或者占用稍大时间,影响了用户体验而又不是必要的等待时间时,就要用到异步。
然后异步线程的大概用法是这样:
public class JSONOperation extends AsyncTask<JSONObject, Void, String>
里面重写的doInBackgroud(JSONObject... JSONObjs) 就是执行的函数,主要用来执行任务主要内容(在这个例子中主要是进行与服务器端的JSON数据包发送与接受,但不包括对Activity的UI更新操作)。然后可以通过返回一个类型的值比如返回一个String或者JSONObject来给下面重写的onPostExecute方法进行对ActivityUI的更新。
比如说 protected String doInBackground(JSONObject... JSONObjs) 方法 发送到服务器端,并且服务器又发送了一个JSON数据包回来,然后这个方法就可以return这个JSON数据包
然后在下面的onPostExecute(JSONObject obj)就对刚刚doInBackground中的JSONObject类型进行引用,在里面可以添加对UI的操作比如TextView的更新什么的。
如果在doInBackground中执行UI更新操作,就会返回android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
这个错误意思是
只有原始创建这个视图层次(view hierachy)的线程才能修改它的视图(view)
实现:
Servlet中的doPost代码
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEn