关于Android与服务器的数据交互,简单累类型的简单,本人也是初学。做小项目遇到了客户端上传图片(头像)或者视频到服务器,读取。

 网上也找了一些。 现在想谈谈自己的思路,方法:

关键点:AsyncTask, 利用异步处理。 重写两个函数, (doInBackground和OnpostExcute)

重点:两个函数属于不同的线程。我们都知道不可以在主线程中进行网络数据的访问。 然而利用AsyncTask,其中的doInBackground函数,我们可以简单理解为是一个子线,

     而onpostExcucte可以简单理解为主线程。

所得到的结果可以直接在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);   
      }
	}



至此完成。