博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android项目之连接数据库(eclipse(java)+soap协议+webservice服务(c#)+sql server数据库)...
阅读量:5011 次
发布时间:2019-06-12

本文共 10368 字,大约阅读时间需要 34 分钟。

 

Android客户端开发

3.1  服务器开发

服务器的主要功能是为客户端提供服务,客户端发送服务请求给服务器,服务器完成客户端的请求,然后把结果返回给客户端,因此,构建服务器的主体是构建能够满足各种服务请求的功能函数,以下列出了客户端将会用到一些函数:

☞搜索函数: public string searchButton(string keyword)☞用户注册函数: public string UserRegister(string type, string androidId, string username, string pwd)☞获得分类下的数据函数:public string GetContentByTypeTagTwo(string type, string TypeTag)☞由标题到正文的映射:public string GetContentBytitle(string title)☞用户注册函数:public string UserRegister(string type, string androidId, string username, string pwd)☞登入日志函数: private static void VisitLog(string username, string title, string userIP ,string logType)

 

☞读图片文件并转化为字符串:

                       

string imagepath = AppDomain.CurrentDomain.BaseDirectory + @"\images\" + "localFile1.jpg";                        FileStream fs = new FileStream(imagepath, FileMode.Open);//打开本地后保存                        byte[] byData = new byte[fs.Length];                        fs.Read(byData, 0, byData.Length);//现在二进制图片在bydata数组当中                        fs.Close();                        //有byte转化为string类型放在strResult当中                        for (int i = 0; i < byData.Length; i++)                        {                            if (i == 0)                                strResult += byData[i].ToString();                            else                                strResult += "." + byData[i].ToString();                        }

 

运行服务器后web页面如下所示:

                 

     

3.2         用户客户端开发

用户客户端的主要工作是设计友好的交互界面。以下介绍客户端的主要功能:

 

任务栏分为五大类,分别是首页、热门、分类、搜索和菜单,首页、热门和分类都是文章列表,首页显示的是最新的咨询,热门显示的是一定时期内浏览量最高的文章,搜索功能可以全站搜索满足关键字的文章,分类分为四大类,分别是日常生活、全球新闻、学习天地合工作招聘,其文章列表按时间排序显示全部文章。以下是所搜界面:

 

 

菜单功能分为更新、注册、登录和退出,如下所示:

 

更新功能能够获取当前最新的咨询,点击更新以后,会同时更新首页、热门和分类下的列表文章,然后跳转到首页。

注册功能能够为用户提供注册,注册页面如下所示:

 

 

客户端界面的主要功能大体就这些。

3.3         服务器和客户端联合

服务器和用户客户端都完成以后,就要实现两者的联合,也就是客户端从服务器获取数据。客户端从服务器获取的过程如下:

①    客户端向服务器发送服务请求;

②    服务器接收客户端的请求,然后调用相关的函数,获得数据结果;

③    服务器端将数据结果处理成JSON串,然后发送给客户端;

④    客户端接收服务器的发送来的JSON串,然后保存在本地缓存中;

⑤    客户端解析JSON串,显示数据。

服务器构建JSON串代码如下:

string json = "";            json = "{\"type\":[{\"CrawlTitle\":\"CrawlTitle\",\"CrawlContent\":\"CrawlContent\",\"CreateTime\":\"CreateTime\",\"FirstImgUrl\":\"FirstImgUrl\"}";            string jtemp = string.Empty;            string one = string.Empty;            string two = string.Empty;            string third = string.Empty;            string four = string.Empty;            foreach (DataRow dataRow in dataTable.Rows)            {                jtemp = "\"CrawlTitle\":\"{0}\",\"CrawlContent\":\"{1}\",\"CreateTime\":\"{2}\",\"FirstImgUrl\":\"{3}\"";                //获得该图片   网址为third = dataRow.ItemArray[3].ToString();                               string strResult = string.Empty;                if (dataRow.ItemArray[3] != null && dataRow.ItemArray[3].ToString() != string.Empty && dataRow.ItemArray[3].ToString() != "")                {                    int localVariable=Download(dataRow.ItemArray[3].ToString(), AppDomain.CurrentDomain.BaseDirectory + @"\images\" + "localFile.jpg");//存到本地                    if (localVariable == 1)                    {                        //对图片进行压缩                        System.Drawing.Imaging.Encoder encoder = System.Drawing.Imaging.Encoder.Quality;//获取品质(压缩率)编码                        EncoderParameter mycoder = new EncoderParameter(encoder, 10L);//0压缩率最大,100品质最高                        EncoderParameters myCoders = new EncoderParameters(1);//参数数组,大小为1                        myCoders.Param[0] = mycoder;//添加一个参数                        ImageCodecInfo jpgInfo = GetEncoder(ImageFormat.Jpeg);//获取JPG格式编解码信息                        Image bmp = Image.FromFile(AppDomain.CurrentDomain.BaseDirectory + @"\images\" + "localFile.jpg");                        bmp.Save(AppDomain.CurrentDomain.BaseDirectory + @"\images\" + "localFile1.jpg", jpgInfo, myCoders);//以指定品质率的JPG格式保存                        bmp.Dispose();                        //再次读取                        string imagepath = AppDomain.CurrentDomain.BaseDirectory + @"\images\" + "localFile1.jpg";                        FileStream fs = new FileStream(imagepath, FileMode.Open);//打开本地后保存                        byte[] byData = new byte[fs.Length];                        fs.Read(byData, 0, byData.Length);//现在二进制图片在bydata数组当中                        fs.Close();                        //有byte转化为string类型   放在  strResult当中                        for (int i = 0; i < byData.Length; i++)                        {                            if (i == 0)                                strResult += byData[i].ToString();                            else                                strResult += "." + byData[i].ToString();                        }                    }                    else                    {                        strResult = "0";                    }                }                else                {                    strResult = "0";                }                //转化成json串                one = dataRow.ItemArray[0].ToString();                two = dataRow.ItemArray[1].ToString();                two = two.Replace("\"", "`");                third = dataRow.ItemArray[2].ToString();                jtemp = string.Format(jtemp, one, two, third,strResult);//暂时直接使用图片的地址发过去                json += ",{" + jtemp + "}";            }            json += "]}";            return json;

  客户端调用服务器函数如下:

if (!file2.exists()) {                file2.createNewFile();            }            FileInputStream inputStream = openFileInput(two);            //            // 判断本地文件是否为空, 满足条件就条用webservice,否则取本地数据            //            if (inputStream.available() == 0)// 网络传则flag=0            {                result2 = Getwebserver.GetContentById1(third, four);                OutputStream outStream_secd = this.getBaseContext()                        .openFileOutput(two, Context.MODE_PRIVATE);                content = result2.toString();// 取得的webservice数据                fileservice.save(outStream_secd, content);            } else {
// 本地传则flag=1 content = fileservice.read(inputStream); Toast.makeText(getApplicationContext(), "提示文件读取成功", Toast.LENGTH_LONG).show(); }

上面调用的 Getwebserver.GetContentById1(third, four);//函数原型如下

private static final String NAMESPACE = "http://wswap.daxuequn.com/";    private static String URL = "http://wswap.daxuequn.com/Service1.asmx";    // 由类1.1. 获得9条相关的记录 获取列表    private static final String METHO = "GetContentByTypeTagTwo";    private static String ACTION5 = "http://wswap.daxuequn.com/GetContentByTypeTagTwo";      public static String GetContentById1(String type, String TypeTag)            throws IOException, XmlPullParserException {        SoapPrimitive detail = null;        try {            String str = null;            SoapObject rpc = new SoapObject(NAMESPACE, METHO);//关联到NAMESPACE, METHO  进而调用服务器上面GetContentByTypeTagTwo函数进而获得json串             rpc.addProperty("type", type);            rpc.addProperty("TypeTag", TypeTag);            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(                    SoapEnvelope.VER11);            envelope.bodyOut = rpc;            envelope.dotNet = true;            envelope.setOutputSoapObject(rpc);            envelope.encodingStyle = "UTF-8";            HttpTransportSE ht = new HttpTransportSE(URL);            ht.debug = true;            ht.call(ACTION5, envelope);            detail = (SoapPrimitive) envelope.getResponse();            if (detail != null)                str = detail.toString();            return str;        } catch (Exception e) {            e.printStackTrace();        }        return "";    }

 

 客户端解析JSON串的代码如下:

  

JSONObject jsonResponse;       try {           jsonResponse = new JSONObject(jsonStr);           // 转换成jsonobject对象           JSONArray jsonArray = jsonResponse.getJSONArray("type");// 获取type属性的value                                                            // 为一个数组           String title = null;           String info = null;           for (int i = 1; i < jsonArray.length(); i++) {              title = jsonArray.getJSONObject(i).getString("CrawlTitle");              // info=jsonArray.getJSONObject(i).getString("CrawlContent");              Map
map = new HashMap
(); map.put("title", title); String inputstream = jsonArray.getJSONObject(i).getString( "FirstImgUrl");// 解析出图片流 字符串 String dtr = null; if (inputstream.equals("0") || inputstream.equals("")) { map.put("img", R.drawable.up); } else { String[] byte_stream = inputstream.split("\\."); int num = byte_stream.length; byte[] bs = new byte[num]; for (int j = 0; j < num; j++) { int a = Integer.parseInt(byte_stream[j]); char c = (char) a; byte bbb = (byte) c; bs[j] = bbb; } /* 解析好的bitmap */ Bitmap newbm = ImageDispose.zoomBitmap( ImageDispose.BytestoBitmap(bs), 72, 72); map.put("img", newbm); } list.add(map); } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return list;

 

文件的缓存实现机制保证无网络仍然可以看新闻,缓存的函数如下:

 

if (inputStream.available() == 0)//网络传则flag=0 {            result2 =Getwebserver.GetContentById1(third,four); OutputStream outStream_secd = this.getBaseContext().openFileOutput(two, Context.MODE_PRIVATE); content = result2.toString();//取得的webservice数据  fileservice.save(outStream_secd, content);   }     else {
//本地传则flag=1 content = fileservice.read(inputStream); Toast.makeText(getApplicationContext(), "提示文件读取成功", Toast.LENGTH_LONG).show(); flag =1; }

 

获取字符串并转化为图片:

String[] byte_stream = inputstream.split("\\."); int num = byte_stream.length; byte[] bs = new byte[num]; for(int j = 0 ;j < num ; j++) {      int a =Integer.parseInt(byte_stream[j]);      char c = (char)a;      byte bbb = (byte) c;      bs[j] = bbb;                  } Bitmap newbm = ImageDispose.zoomBitmap(ImageDispose.BytestoBitmap(bs) ,72,72);

 

 

解析成功后,获得的文章列表和文章内容如下所示:

    

 

使用关键字“苹果”搜索后界面如下:

 

 

注册账户,登陆后界面如下:

具体文件见百度网盘的“创新”文件夹

 

转载于:https://www.cnblogs.com/xjx-user/archive/2012/12/05/2803800.html

你可能感兴趣的文章
delphi 基础书籍推荐
查看>>
《面向对象程序设计》2018年春学期寒假及博客作业总结
查看>>
iOS开发UI之KVC(取值/赋值) - KVO (观察某个对象的某个属性的改变)
查看>>
1.7 将一个MxN矩阵所有为0的元素所在行和列全部置0
查看>>
删除U盘时提示无法停止‘通用卷’设备的解决方法!!不要每次都硬拔了,对电脑有不小的损害!!!...
查看>>
Java中接口与接口和类之间的关系
查看>>
芯片TPS70925
查看>>
linux shell 发送email 附件
查看>>
人群密度估计 CrowdCount
查看>>
JSON.parse()和JSON.stringify()
查看>>
.net 常用正则表达式
查看>>
Java泛型中的标记符含义:
查看>>
初遇GitHub
查看>>
[C# 网络编程系列]专题八:P2P编程
查看>>
Jsの练习-数组常用方法 -forEach()
查看>>
动态绑定treeview的方法
查看>>
jvm参数
查看>>
3-1 案例环境初始化
查看>>
读《构建之法》第四章和十七章有感
查看>>
01背包
查看>>