解决方案 »

  1.   

    采用gson这个jar包吧,非常方便。
      

  2.   

    这里android和web没有区别,把需要传递的数据封装成对象,然后转换成字符串通过post传递。
    下面附上封装好的几个常用方法:
    import java.net.URLEncoder;
    import java.util.ArrayList;
    import java.util.Arrays;import com.google.gson.Gson;/**
     * json字符串 和对象互换 工具类
     * 依赖Gson包
     * @see com.google.gson.Gson
     * @author devil
     *
     */
    public class JsonUtil {
     
    /**
     * 将json字符串转换成对象
     * 
     * @param json
     * @param type
     * @return
     */
    public static <T> T parse(String json, Class<T> type) {
    Gson gson = new Gson();
    T t = null ;
    try {
     t = gson.fromJson(json, type) ;
    } catch (Exception e) {
    e.printStackTrace() ;
    return null ;
    }

    return t;
    } /**
     * 将json转成数组
     * 
     * @param json
     * @param type
     * @return
     */
    public static <T> T[] parseArr(String json, Class<T[]> type) {
    return parse(json, type);
    } /**
     * 将json转成集合
     * 
     * @param json
     * @param type
     * @return
     */
    public static <T> ArrayList<T> parseList(String json, Class<T[]> type) {
    return new ArrayList<T>(Arrays.asList(parse(json, type)));
    } /**
     * 将对象转成json字符串
     * 
     * @param o
     * @return
     */
    public static String format(Object o) {
    Gson gson = new Gson();
    return gson.toJson(o);
    }

    /**
     * 将对象转成json字符串 并使用url编码
     * @param o
     * @return
     */
    public static String formatURLString(Object o)
    {
    try
    {
    return URLEncoder.encode(format(o), "utf-8");
    }catch (Exception e) {
    return null;
    }
    }
    }
      

  3.   

    具体的应该怎么用post传递呢?谢谢
      

  4.   


    HttpPost httpPost = new HttpPost(url);
    try {
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("username", username));

    httpPost.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));
    DefaultHttpClient httpclient = new DefaultHttpClient();
    HttpConnectionParams.setConnectionTimeout(httpPost.getParams(), 10000);//设置连接超时
    HttpConnectionParams.setSoTimeout(httpPost.getParams(), 10000); //设置请求超时
    HttpResponse httpResponse =httpclient.execute(httpPost);
    if(httpResponse.getStatusLine().getStatusCode()==200){//成功响应了请求
      

  5.   

    http请求网上代码一大堆。
    public static String postHttpResponseText(String url, String post) {
    BufferedReader reader = null;
    HttpURLConnection conn = null;
    try {
    URL httpUrl = new URL(url);
    HttpURLConnection httpConn = (HttpURLConnection) httpUrl
    .openConnection(); // //设置连接属性
    httpConn.setDoOutput(true);// 使用URL 连接进行输出
    httpConn.setDoInput(true);// 使用 URL 连接进行输入
    httpConn.setUseCaches(false);// 忽略缓存
    httpConn.setRequestMethod("POST");// 设置URL请求方法
    String requestString = post; // 设置请求属性
    // 获得数据字节数据,请求数据流的编码,必须和下面服务器端处理请求流的编码一致
    byte[] requestStringBytes = requestString.getBytes("UTF-8");
    httpConn.setRequestProperty("Content-length", ""
    + requestStringBytes.length);
    httpConn.setRequestProperty("Content-Type", "application/json");
    httpConn.setRequestProperty("Connection", "Keep-Alive");// 维持长连接
    httpConn.setRequestProperty("Charset", "UTF-8");
    // 建立输出流,并写入数据
    OutputStream outputStream = httpConn.getOutputStream();
    outputStream.write(requestStringBytes);
    outputStream.close(); // 获得响应状态
    int responseCode = httpConn.getResponseCode();
    if (HttpURLConnection.HTTP_OK == responseCode) {// 连接成功 //
    // 当正确响应时处理数据
    StringBuffer buffer = new StringBuffer();
    String readLine = null;
    // 处理响应流,必须与服务器响应流输出的编码一致
    reader = new BufferedReader(new InputStreamReader(
    httpConn.getInputStream(), "UTF-8"));
    while ((readLine = reader.readLine()) != null) {
    //buffer.append(readLine).append("\n");
    buffer.append(readLine);
    }
    reader.close();
    return buffer.toString();
    }
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    if (reader != null) {
    try {
    reader.close();
    } catch (IOException e1) {
    }
    }
    if (conn != null) {
    conn.disconnect();
    }
    }
    return null; }
    这是自己写的,url是请求地址,post是参数
      

  6.   

    这个是android建立和服务器的链接后,通过outputStream就把requestStringBytes发送过去了么?那POST传的是什么参数 不好意思小弟初学~麻烦了
      

  7.   

    还有这个时候服务器的servlet应该怎么接收我传过来的requestStringBytes数据并且给个返回值呢
      

  8.   

    看错了- -,发的应该是requestString也就是我的post是要发的字符串对吧,吧byte看成string了
      

  9.   

    还有这个时候服务器的servlet应该怎么接收我传过来的requestStringBytes数据并且给个返回值呢需要传递参数的,javaBean知道吧,给javaBean的各个字段赋值,然后调用JsonUtil.format(Object obj)方法转换成String字符串,这个字符串就是post参数,如果没有参数直接post那直接写null或""就行。
    既然是以流的形式传递,那servlet那接收也是一样以流的形式接收。贴一段基础的代码:
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/hmtl;charset=utf-8");
    PrintWriter out = response.getWriter();
    // 当正确响应时处理数据
    StringBuffer buffer = new StringBuffer();
    String readLine = null;
    // 处理响应流,必须与服务器响应流输出的编码一致
    BufferedReader reader = new BufferedReader(new InputStreamReader(
    request.getInputStream(), "UTF-8"));
    while ((readLine = reader.readLine()) != null) {
    buffer.append(readLine).append("\n");
    }
    reader.close();
    CategoryDto cateDto = JsonUtil.parse(buffer.toString(),
    CategoryDto.class);
    System.out.println(cateDto.getUserNick() + "用户发布消息");
    TongChengDAO chengDAO = new TongChengDAOImpl();
    chengDAO.updateCategory(cateDto, 1);
    out.print("yes");
    }
    接收到的字节流转换成字符串,然后通过JsonUtil转换成JavaBean对象。
      

  10.   

    servlet返回到android直接out.print出去就行了。
      

  11.   

    servlet接到数据后 直接out.print就是给andriod返回的数据么?然后android在与服务器响应流输出的编码一致的时候你的这句reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "UTF-8"));就是接收到的返回的消息了么?
      

  12.   

    servlet接到数据后 直接out.print就是给andriod返回的数据么?然后android在与服务器响应流输出的编码一致的时候你的这句reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "UTF-8"));就是接收到的返回的消息了么?postHttpResponseText这个方法的返回值就是servlet返回的数据。
    如果你只是返回简单的状态码表示请求成功或失败,直接out.print就行了。如果是其他的list数据这种,将对象转换成json字符串再out.print
      

  13.   

    servlet接到数据后 直接out.print就是给andriod返回的数据么?然后android在与服务器响应流输出的编码一致的时候你的这句reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "UTF-8"));就是接收到的返回的消息了么?postHttpResponseText这个方法的返回值就是servlet返回的数据。
    如果你只是返回简单的状态码表示请求成功或失败,直接out.print就行了。如果是其他的list数据这种,将对象转换成json字符串再out.print能加一下你QQ么~我想具体问下
      

  14.   

    servlet接到数据后 直接out.print就是给andriod返回的数据么?然后android在与服务器响应流输出的编码一致的时候你的这句reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "UTF-8"));就是接收到的返回的消息了么?postHttpResponseText这个方法的返回值就是servlet返回的数据。
    如果你只是返回简单的状态码表示请求成功或失败,直接out.print就行了。如果是其他的list数据这种,将对象转换成json字符串再out.print为什么现在到建立输出流 OutputStream outputStream = httpConn.getOutputStream();的时候就抛异常?
      

  15.   

    安卓内置了一个httpClient 用这个邦定参数用一个URL用POST方法发过去.当然.你也可以用GET方法?json=XXXXX
    servlet接收的方式跟javaEE的一样.reqeust.get参数(参数名).
    服务器发回来就是直接用流writer出去.
    安卓接收的话.用httpClient发起一个请求.得到一个httpresponse.
    HttpResponse response = new DefaultHttpClient().execute(GET请求);
    content = EntityUtils.toString(response.getEntity());这样就可以得到一个json字符串了像楼上的大神们说的一样..跟WEB开发的 过程差不多..发起请求.响应请求..只不过把jsp换成了安卓.
    因为跨平台.所以都用JSON或XML来作为数据载体..而不是像JSP那用绑定到request中
      

  16.   

    谢谢 想再问一下 当服务器writer返回流的时候 安卓端怎么接收?
      

  17.   

    HttpResponse response = new DefaultHttpClient().execute(GET请求);
    这个response就是你接收到的东西.. 
    这样说吧.你有一个servlet.它是会返回一个流A的.它叫JSONservlet.action 谁请求它.它就返回一个流A.
    那么HttpResponse response = new DefaultHttpClient().execute(GET请求--JSONservlet.action) 这个response就得到这个流A了
    你应走进一个误区了.你要知道.每一个URL请求.都会得到响应数据的.每个URL请求.就对应一个servlet. 你要得到哪个servlet的响应数据.那你就访问哪个servlet就行了
      

  18.   

    servlet接到数据后 直接out.print就是给andriod返回的数据么?然后android在与服务器响应流输出的编码一致的时候你的这句reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "UTF-8"));就是接收到的返回的消息了么?postHttpResponseText这个方法的返回值就是servlet返回的数据。
    如果你只是返回简单的状态码表示请求成功或失败,直接out.print就行了。如果是其他的list数据这种,将对象转换成json字符串再out.print能加一下你QQ么~我想具体问下747043350 ~你如果对java都不熟悉的话还是先去了解点java 的基础吧。android只是像jsp一样的客户端一样而已,客户端输出流,服务端输入流,处理,再输出流,客户端输入流。就这样。都是通过流的形式。
      

  19.   

    servlet接到数据后 直接out.print就是给andriod返回的数据么?然后android在与服务器响应流输出的编码一致的时候你的这句reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "UTF-8"));就是接收到的返回的消息了么?postHttpResponseText这个方法的返回值就是servlet返回的数据。
    如果你只是返回简单的状态码表示请求成功或失败,直接out.print就行了。如果是其他的list数据这种,将对象转换成json字符串再out.print能加一下你QQ么~我想具体问下747043350 ~你如果对java都不熟悉的话还是先去了解点java 的基础吧。android只是像jsp一样的客户端一样而已,客户端输出流,服务端输入流,处理,再输出流,客户端输入流。就这样。都是通过流的形式。哦 麻烦了~原来是用EntityUtils.toString(httpResponse.getEntity()取返回流的~谢谢
      

  20.   

    servlet接到数据后 直接out.print就是给andriod返回的数据么?然后android在与服务器响应流输出的编码一致的时候你的这句reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "UTF-8"));就是接收到的返回的消息了么?postHttpResponseText这个方法的返回值就是servlet返回的数据。
    如果你只是返回简单的状态码表示请求成功或失败,直接out.print就行了。如果是其他的list数据这种,将对象转换成json字符串再out.print能加一下你QQ么~我想具体问下747043350 ~你如果对java都不熟悉的话还是先去了解点java 的基础吧。android只是像jsp一样的客户端一样而已,客户端输出流,服务端输入流,处理,再输出流,客户端输入流。就这样。都是通过流的形式。因为之前看了看安卓基础,PDF没有与服务器端的交互 所以概念比较模糊 听你说了后懂很多 真的谢谢
      

  21.   

    gson转化时貌似时间格式要先变为string,才能转化成果吧