关于Android与服务器的数据交互,简单累类型的简单,本人也是初学。做小项目遇到了客户端上传图片(头像)或者视频到服务器,读取。
网上也找了一些。 现在想谈谈自己的思路,方法:
关键点:AsyncTask, 利用异步处理。 重写两个函数, (doInBackground和OnpostExcute)
重点:两个函数属于不同的线程。我们都知道不可以在主线程中进行网络数据的访问。 然而利用AsyncTask,其中的doInBackground函数,我们可以简单理解为是一个子线,
而onpostExcucte可以简单理解为主线程。
doinBackground所得到的结果可以直接在onpostExcute中拿到,可以根据拿到的数据直接在onPostExcute中修改UI。
举个例子,我们要在客户端显示用户头像, 那么我们的目标就是拿到图片在服务器的地址,(转为bitmap.略)
下边我结合gSOn。我们都知道gSon可以再哭护短手机端进行数据传递,可以传递一个对象,一个集合.....,只不过他们之间传输的是字符串,比如我们在服务器发送一个对象信息,就需要把该对象通过GSON 发送,相应的,到了Android这边,就需要用到json解析,
下边我贴出来一个实例供大家理解: (需要导入gson的jar包)
public void getVideoPath(){//得到视频地址的方法 final String PATH="http://10.203.1.51:8080/Test/UserLoginServlet"; //指定服务器的Servlet,注意不要用Localhost,要用IP AsyncTask<Void, Void, String> at=new AsyncTask<Void, Void, String>(){ @Override//AsyncTask 三个参数,前两个貌似固定(新手)第三个重要:我们需要什么就在此设定什么,比如集合(我的是String,也可以是对象) protected String doInBackground(Void... params) { try { HttpClient client = new DefaultHttpClient(); HttpGet get=new HttpGet(PATH); HttpResponse response = client.execute(get); if(response.getStatusLine().getStatusCode()==200){//响应Ok //接下来读取数据` InputStream is=response.getEntity().getContent(); byte da[]=take(is);//返回一个数组,即JSON字符串 String json=new String(da); Gson gson=new Gson(); //Type typeOfT=new TypeToken<Users>(){}.getType(); Users users=gson.fromJson(json, new TypeToken<Users>(){}.getType()); String uri=users.getImageURl(); return uri;//这边注意,我们需要什么。在这直接返回,在下函数可直接拿到 } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String result) {//此处的result 就是上边函数返回的uri super.onPostExecute(result); if(result!=null){// System.out.println(result);// //这就拿到了上边的uri,即服务器发送来的;你可以把Sgtring 换成对象,,集合。 //可在此函数直接修改ui } } }; at.execute();//这句别忘了 }我再贴出服务器端的
@WebServlet("/UserLoginServlet") public class UserLoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("utf-8"); // 视频地址:http://localhost:8080/Test/radio/aaa.wmv User user=new User(); Gson gson=new Gson(); String user1=gson.toJson(new Users("TRUE","http://localhost:8080/Test/radio/aaa.wmv"));//注意于User实体类字段相匹配 response.getWriter().write(user1);//这就把一个User对象写出去,可在Android拿到 System.out.println(user); } }