android通过HttpClient与服务器JSON交互
通过昨天对HttpClient的学习,今天封装了HttpClient类
代码如下:
package com.tp.soft.util; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map; import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP; public class HttpUtil {
public static String postRequest(String serverPath, Map<String, String> params, String encoding){
List<NameValuePair> paramPair = new ArrayList<NameValuePair>();
if(params != null && !params.isEmpty()){
for(Map.Entry<String, String> entry : params.entrySet()){
paramPair.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
}
try {
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(serverPath);
post.setEntity(new UrlEncodedFormEntity(paramPair, HTTP.UTF_8));
HttpResponse response = client.execute(post);
if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
//数据
String reqData = null;
String responseData = "";
while((reqData = br.readLine()) != null){
responseData += reqData;
}
br.close();
return responseData;
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "postRequest error";
}
}
然后通过调用HttpUtil类来达成与服务器交互
package com.tp.soft.app; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView; import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.tp.soft.entity.User;
import com.tp.soft.util.HttpUtil; public class MainActivity extends Activity { private ListView mListView;
private TextView mContentTxt;
private TextView mTimeTxt; private String serverPath = "http://122.226.178.54:8080/uploadApp/LoginServlet";
private static final String ENCODING = "utf-8";
private List<User> userList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
loadList();
mListView = (ListView) findViewById(R.id.list_id);
mListView.setAdapter(new BaseAdapter() { @Override
public View getView(int position, View convertView, ViewGroup parent) {
if(null == convertView){
convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item, null);
} TextView textView = (TextView) convertView.findViewById(R.id.contentTxt);
textView.setText(userList.get(position).getUsername());
return convertView;
} @Override
public long getItemId(int position) {
return position;
} @Override
public Object getItem(int position) {
return position;
} @Override
public int getCount() {
return userList.size();
}
});
} private List<User> loadList() {
Map<String, String> params = new HashMap<String, String>();
String data = HttpUtil.postRequest(serverPath, params, ENCODING);
userList = new Gson().fromJson(data, new TypeToken<List<User>>() {}.getType());
return userList;
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
服务器端则采用了servlet
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("utf-8");
        String uname = request.getParameter("uname");
        String pwd = request.getParameter("pwd");
        PrintWriter pw = response.getWriter();
        Gson gson = new GsonBuilder().create();
        List<User> userList = new ArrayList<User>();
        User user = new User();
        user.setUsername("zs");
        user.setPassword("");
        userList.add(user);
        User user1 = new User();
        user1.setUsername("lisi");
        user1.setPassword("");
        userList.add(user1);
        String json = gson.toJson(userList);
        pw.print(json);
    }
android通过HttpClient与服务器JSON交互的更多相关文章
- Android 客户端和服务器 json交互
		
http://www.cnblogs.com/jyan/articles/2544974.html 1.JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. ...
 - android get或post及HttpClient与服务器数据交互
		
1.Service package mydemo.mycom.demo2.service; import org.apache.http.HttpResponse; import org.apache ...
 - Android实现与PHP服务器的交互
		
今天算是有点小激动呢!拿到Android与PHP这个课题已经两个星期了,直到今天才算是有了一点点小收获. 虽然还是没能成功上传到服务器,不过已经看到了曙光,已经实现了一半了,那就是已经连接到了服务器. ...
 - android通过httpClient请求获取JSON数据并且解析
		
使用.net创建一个ashx文件,并response.write json格式 public void ProcessRequest(HttpContext context) { context.R ...
 - Android使用HttpClient向服务器传输文件
		
HttpClient是Apache Jakarta Common下的子项目,可以用来提供功能丰富的支持HTTP协议的客户端编程工具包,这几天写客户端的时候遇到个问题,“客户端需要向服务器发送Post请 ...
 - Android使用HttpClient请求服务器代码优化版
		
首先,我在前面的两篇博文中介绍了在Android中,除了使用java.net包下HttpUrlConnection的API访问HTTP服务之外,我们还可以换一种途径去完成工作.Android SDK附 ...
 - Android使用HttpClient以Post、Get请求服务器发送数据的方式(普通和json)
		
讲这个之前,我们先来说说get和post两种请求的区别吧!!! 1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.jsp?name=te ...
 - 使用基于Android网络通信的OkHttp库实现Get和Post方式简单操作服务器JSON格式数据
		
目录 前言 1 Get方式和Post方式接口说明 2 OkHttp库简单介绍及环境配置 3 具体实现 前言 本文具体实现思路和大部分代码参考自<第一行代码>第2版,作者:郭霖:但是文中讲 ...
 - unity用json和服务器数据交互
		
第一种类型:服务器json数据是个对象 /// <summary> /// 获取用户信息初始化信息 /// </summary> void InitUserMessage() ...
 
随机推荐
- 安装XDEBUG步骤及问题
			
echo PHPINFO(); 如果搜索中没找到XDEBUG, 则表示没安装XDEBUG; XDEBUG官方下载路径, https://xdebug.org/download.php 查看环境参数 我 ...
 - Jquery EasyUI使用总结(一)
			
1,弹出Iframe,新窗口 //打开编辑页面要加载的数据 function ShowDialog(id, url, width, height, onLoadFunc) { $("#&qu ...
 - 直观友好的单个memcache监控工具:phpmemcache.php
			
上传phpmemcache.php到指定文件 修改文件中的: define('ADMIN_USERNAME','user'); // Admin Usernamedefine('ADMIN_P ...
 - switch多分支语句
			
1.switch多分支语句的语法 switch(表达式){ case 常量值:要执行的语句; break; case 常量值:要执行的语句; break; case 常量值:要执行的语句; break ...
 - zepto源码--核心方法7(管理包装集)--学习笔记
			
后面应该会有几篇连续介绍关于zepto包装集的文章.涉及的函数较多,就分别介绍,今天介绍几个使用关系获取包装集的方法.prev, next, first, last, siblings, eq pre ...
 - CentOS7安装配置SAMBA服务器
			
假设我们有这样一个场景 共享名 路径 权限 SHAREDOC /smb/docs 所有人员包括来宾均可以访问 RDDOCS /smb/tech 仅允许特定组的用户进行读写访问 特定组的组名为RD,目前 ...
 - 字节流与字符流(FileInputStream类和FileOutputStream类)
			
FileInputStream类和FileOutputStream类中,第一个类的源端和第二个类的目的端都是磁盘文件,它们的构造方法允许通过文件的路径名来构造相应的流.例如: FileInputSte ...
 - RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件WinForm业务平台
			
RDIFramework.NET ━ .NET快速信息化系统开发框架 工作流程组件WinForm业务平台 接上篇: RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组 ...
 - (九)串行口方式0 拓展并行输入端口  74LS165 芯片
			
74LS165芯片讲解: 外接一个同步移位寄存器 74LS165芯片,拓展一个 8 位 并行输入端口的电路, 可将接在74LS165芯片的8个开关 S0——S7 的状态 通过 串行口方式 0 读到 单 ...
 - session跟cookies区别
			
Session和Cookie的使用总结: Session和cookie都是asp.Net中的内置对象,至于他们有什么区别,在这里就不在多说,现在来说说一些比较实用点的东西: 我们知道网站都有一个后台管 ...