Android网络通信技术(HttpClient),在网络上运用(SerializableEntity)直接传输对象

在开始之前说些题外话,本文章为本菜鸟的第一篇,有不足之处请高手指点,谢谢!

转入正题:在实际的开发运用过程中,android的通信会用到httpClient来传输数据,在我之前的项目中都是用如下形式传输:

NameValuePair nvp1 = new BasicNameValuePair("username", name);  
NameValuePair nvp2 = new BasicNameValuePair("password", age);  
List<NameValuePair> list = new ArrayList<NameValuePair>();  
HttpEntity requestHttpEntity = new UrlEncodedFormEntity(list,HTTP.UTF_8);  
httpPost.setEntity(requestHttpEntity);
然而我发现这其中只能传一些String类型的,在BasicNameValuePair中并不能用键值对形式的去传输一个对象类型的数据如: Book book = new Book();

NameValuePair nvp1 = new BasicNameValuePair("book", book);这样是不可以行的。那我要传输对象怎么办了?在查看API后发现可以运用SerializableEntity来传送对象,下面我就上代码:

实体类Book.class

package com.gutao.entity;
import java.io.Serializable;
public class Book implements Serializable {
    private String name;
    private String price;
    private String author;
    public Book() { 
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPrice() {
        return price;
    }
    public void setPrice(String price) {
        this.price = price;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
}
Activity如下:

public class MainActivity extends Activity {
    private Button postButton;
    private String baseUrl = "http://192.168.31.23:8080/Wireless_server/user/login.do";
    private HttpResponse httpResponse = null;
    private HttpEntity httpEntity = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        postButton = (Button) findViewById(R.id.buttonPost);
        postButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                Book b = new Book();
                b.setName("android高级编程");
                b.setAuthor("XXXX");
                b.setPrice("65$");
                try {
                    HttpEntity entity = new SerializableEntity(b, true);
                    HttpPost httpPost = new HttpPost(baseUrl);
                    httpPost.setEntity(entity);
                    HttpClient httpClient = new DefaultHttpClient();
                    httpResponse = httpClient.execute(httpPost);
                    httpEntity = httpResponse.getEntity();
                    InputStream in = httpEntity.getContent();
                    String line = "";
                    String result = "";
                    BufferedReader bfr = new BufferedReader(
                            new InputStreamReader(in));
                    while ((line = bfr.readLine()) != null) {
                        result += line;
                    }
                    Log.i("Post", result);
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                } catch (ClientProtocolException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
    }
记得加入网络权限哦!

<uses-permission android:name="android.permission.INTERNET" />
当点击postButton的时候将传输数据。后台程序为:

@RequestMapping(value = "/login", method = RequestMethod.POST)
    public ModelAndView post(HttpServletRequest request,
            HttpServletResponse response) {
        System.out.println("=============Post");
        try {
            request.setCharacterEncoding("utf-8");
            ObjectInputStream dis = new ObjectInputStream(
                    request.getInputStream());
            Book book = (Book) dis.readObject();
            System.out.println(book.getName() + "" + book.getPrice());
        } catch (UnsupportedEncodingException e2) {
            e2.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        ModelAndView mav = new ModelAndView("post");
        List<String> list = new ArrayList<String>();
        list.add("hehe");
        list.add("Hello");
        mav.addObject("name", list);
        return mav;
    }

基本就是这样,不足之处,欢迎批评指正!谢谢!







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值