注册 登录
编程论坛 C# 论坛

android项目也能和WCF搞激情

wangnannan 发布于 2015-03-27 11:25, 1300 次点击
由于工作需要从.net转到了android开发 android涉及到通信 于是想把以前学习的wcf rest和这个结合起来 闲话少说于是开工
首先我先写一个wcf rest服务  上图
只有本站会员才能查看附件,请 登录


14 回复
#2
wangnannan2015-03-27 11:26
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
#3
wangnannan2015-03-27 11:27
只有本站会员才能查看附件,请 登录
#4
wangnannan2015-03-27 11:28
好写了几个DEMO方法 主要是get 和post 至此服务端大功告成 由于和anroid通信数据最主要是json  
打开eclipse
#5
wangnannan2015-03-27 11:29
只有本站会员才能查看附件,请 登录
#6
wangnannan2015-03-27 11:30
程序代码:
Runnable runnable = new Runnable() {
        @Override
        public void run() {

            // 该部分是传参并更新控件
            Message msg = new Message();
            msg.what = -1;
            // 发送消息到Handler
            CommonData app = (CommonData)getApplication();
            HttpPost request = new HttpPost(app.getLoginaddress());// wcf地址
            request.setHeader("Accept", "application/json");
            request.setHeader("Content-type", "application/json");

            // 构造json
            JSONStringer vehicle;
            try {
                // Message为方法参数名字
                vehicle = new JSONStringer().object().key("user").object().key("UserName")
                        .value(edittext_user_username.getText().toString().trim()).key("PassWord")
                        .value(edittext_user_pwd.getText().toString().trim()).endObject()
                        .endObject();
                // 向WCF服务发送请求
                StringEntity entity = new StringEntity(vehicle.toString(), "UTF-8");
                request.setEntity(entity);//
            
                DefaultHttpClient httpClient = new DefaultHttpClient();
                // 请求超时
                httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 20000);
                // 读取超时
                httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 20000);
                HttpResponse response = httpClient.execute(request);
                if (response.getStatusLine().getStatusCode() != 200) {
                    // 加载失败界面
                    msg.what = 1;
                } else {

                    BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity()
                            .getContent()));
                    String line = "";

                    while ((line = rd.readLine()) != null) {
                        Integer integer = Integer.valueOf(line.replaceAll("\\D+", "")
                                .replaceAll("\r", "").replaceAll("\n", "").trim());
                        if (integer > 0) {
                            //保存登录用户ID
                            app.setUserid(integer.toString());
                           
                     
                        } else {
                            msg.what = 0;
                            Log.d("****passworderror****", "passworderror");
                        }
                    }
                }
               
               
            

            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();

                msg.what = 1;
            } finally {
                if (msg.what == -1) {
                    msg.what = 101;
                }
                handler.sendMessage(msg);
            }

        }
    };
#7
wangnannan2015-03-27 11:31
涉及到了java代码了 其实和c#语法是类似的
主要代码块都已经注释了 和c#引用rest服务 如出一辙


[ 本帖最后由 wangnannan 于 2015-3-27 11:34 编辑 ]
#8
wangnannan2015-03-27 11:32
只有本站会员才能查看附件,请 登录
#9
wangnannan2015-03-27 11:33
程序代码:
HttpClient client = new DefaultHttpClient();
                HttpGet request = new HttpGet(app.getMenuaddress() + "/" + app.getUserid());

                HttpResponse response = client.execute(request);
                HttpEntity responseEntity = response.getEntity();
                char[] mbuffer = new char[(int)responseEntity.getContentLength()];
                InputStream stream = responseEntity.getContent();
                InputStreamReader reader = new InputStreamReader(stream);
                reader.read(mbuffer);
                stream.close();

                JSONArray plates = new JSONArray(new String(mbuffer));
                String[] groups = new String[plates.length()];
                for (int i = 0; i < plates.length(); i++) {
                    JSONObject temp = (JSONObject)plates.get(i);
                    String value = temp.getString("Value");
                  
                    map.put(temp.getString("Value"),temp.getString("Trainid"));
                    //mapotid
                    mapotid.put(temp.getString("Value"),temp.getString("Otid"));
                  
                    groups[i] = String.valueOf(value);
                }
请求实体类的数据 主要代码如下
#10
wangnannan2015-03-27 11:33
至此 android成功请求wcf json数据 测下下效率还不错
#11
wangnannan2015-03-27 11:34
社团就拜托大家了
#12
weiailou2015-04-24 12:14
#13
sun2824307242015-04-24 21:34
好有难度的代码啊看不懂
#14
yinniannian2015-04-29 15:54
学习了。
#15
Maick2015-05-04 10:08
大神..膜拜
1