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("1");
        userList.add(user);

        User user1 = new User();
        user1.setUsername("lisi");
        user1.setPassword("2");
        userList.add(user1);
        String json = gson.toJson(userList);
        pw.print(json);
    }

android通过HttpClient与服务器JSON交互

时间: 2024-11-05 08:51:37

android通过HttpClient与服务器JSON交互的相关文章

android通过httpClient请求获取JSON数据并且解析

android通过httpClient请求获取JSON数据并且解析:http://www.cnblogs.com/gzggyy/archive/2013/05/08/3066288.html Android--使用Http向服务器发送请求并取得返回结果,下载图片:http://www.2cto.com/kf/201307/229489.html Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据):http://blog.csdn.net/he

Android实现与PHP服务器的交互

今天算是有点小激动呢!拿到Android与PHP这个课题已经两个星期了,直到今天才算是有了一点点小收获. 虽然还是没能成功上传到服务器,不过已经看到了曙光,已经实现了一半了,那就是已经连接到了服务器.不 说废话了,还是写点自己的记录吧! 如果想要实现Android与PHP的交互我们首先应该知道一个叫AsynTask的抽象类. 下面是我的笔记: 为了方便在子线程中对UI进行操作,Android提供了一些好用烦人工具类,AsynTask就是其中之一.借助AsynTask,可以十分简单地从子线程切换到

Android使用HttpClient向服务器传输文件

HttpClient是Apache Jakarta Common下的子项目,可以用来提供功能丰富的支持HTTP协议的客户端编程工具包,这几天写客户端的时候遇到个问题,“客户端需要向服务器发送Post请求的时候要同时附带请求参数和文件”,刚接触HttpClient,不太了解,尝试了好久终于找到了方法,故写个随笔记一下. 问题: 客户端向服务器发送post请求的时候要同时带参数和文件 开发环境: Android Studio1.22 HttpClient版本:httpclient-android 4

Android网络(3):HttpClient作客户端,Tomcat Servlet作服务器的交互示例

前面相继介绍了Android网络编程里的Socket传输图片.HttpURLConnection,今天看HttpClient. 第一部分:JavaEE版的Eclipse配置Tomcat [备注:开发后台服务器用Eclipse的JavaEE版最好的,但单就Tomcat来说(不写jsp之类的),本文下面的服务器方面操作在普通版的Eclipse也是可以的.我这里为了和ADT-bundle分开,特意重新安个JavaEE版的Eclipse.] 1.下载Eclipse的Tomcat插件:http://www

Android客户端和Servlet服务器端通过JSON交互

本文结构如下: 1. android和servlet之间的直接信息传递(不通过json) 1.1 android端代码 1.2 servlet端代码 2. android和servlet之间通过json进行交互 2.1 android端代码 2.2 servlet端代码 ============================================================= 1. android和servlet之间的直接信息传递 在android端通过httpclient去访问

Android客户端与PC服务器通过socket进行交互实例(转)

一直以来对Android socket通信都很模糊,今天终于研究了一个网上的例子,自己又修改了下,算是对Android socket通信有点了解了. 下面是具体的代码,说明都在注释中了.需要注意的是,只有客户端发送了信息给服务器后,服务器才能响应客户端的输入,然后返回信息给客户端,这是客户端才能读取服务器返回的信息.如果客户端和服务器都处于等待对方的信息,那样就会造成阻塞,导致ANR了. 1.服务器端代码,就是一个java程序,与android无关,运行于服务器上,即PC机上. [java] v

Android使用HttpClient实现文件上传到PHP服务器,并监控进度条

上传 服务器端PHP 代码如下 : <?php $target_path = "./tmp/";//接收文件目录 $target_path = $target_path.($_FILES['file']['name']); $target_path = iconv("UTF-8","gb2312", $target_path); if(move_uploaded_file($_FILES['file']['tmp_name'], $targ

Android:解决客户端从服务器上获取数据乱码的方法

向服务器发送HTTP请求,接收到的JSON包为response,用String content = EntityUtils.toString(response.getEntity(),"utf-8");解码还是出现了中文乱码,在后面加了 String name = new String(response.getBytes("iso-8859-1"), "UTF-8"); 也无济于事.想到服务器好像是用URLENCODER编了码的,怀着试一试的态度

Android访问WCF服务(使用json实现参数传递)

经过多日努力, 终于勉强弄明白了Android访问WCF服务的方法. 服务端实现 一, 实现服务. 操作契约 [csharp] view plaincopy [ServiceContract] public interface IService { [OperationContract] [WebInvoke( BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, Reque