一、前
对于一个图片社区来说,仅使用自带的图片当然是远远不够的。现在来加入图片从服务器获取的功能,因为对保密性及性能要求不高,这里采用Servlet传输数据,Json解析,本次介绍暂不涉及数据库操作。
流程简要如下:
二、服务器设置
1.准备
这里我们为了临时测试Android,使用已经写好的Json字符串放置在Servlet等待访问。
1 2
| [{"url":"http://192.168.1.106/Cyhs/1.jpg","author":"cyhs"},{"url":"http://192.168.1.106/Cyhs/2.jpg","author":"cyhs"},{"url":"http://192.168.1.106/Cyhs/3.jpg","author":"cyhs"},{"url":"http://192.168.1.106/Cyhs/4.jpg","author":"cyhs"},{"url":"http://192.168.1.106/Cyhs/5.jpg","author":"cyhs"}]
|
2.Servlet
ImgServlet:直接将上述字符串打印输出即可。
1 2 3 4 5 6
| response.getWriter().write("["); for (int i=1;i<5;i++){ response.getWriter().append("{\"url\":\"http://192.168.1.106/Cyhs/"+i+".jpg\","+"\"author\":\"cyhs\"},"); } response.getWriter().append("{\"url\":\"http://192.168.1.106/Cyhs/"+4+".jpg\","+"\"author\":\"cyhs\"}"); response.getWriter().append("]");
|
三、实体类
为了方便我们在Android端对数据更好的解析和处理,使用实体类将数据规格化。
1 2 3 4 5
| public class Images { public String sURL; public String sAuthor; }
|
四、解析
1.网络访问HttpUtils
这里我们设置了一个HttpUtils工具类,用来存放网络相关操作,今天用到了获取Servlet返回值,暂且写一个getServer()函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public static String getServer(String URL){ boolean loginValidate = false; String responseMsg="网络出错"; HttpPost request = new HttpPost(URL); try { HttpClient client = getHttpClient(); HttpResponse response = client.execute(request); if(response.getStatusLine().getStatusCode() == 200){ loginValidate = true; responseMsg = EntityUtils.toString(response.getEntity()); } } catch (Exception e) { e.printStackTrace(); } return responseMsg; }
|
2.解析类ImageParse
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class ImageParse { public static ArrayList<Images> imageParse(String imaData) { ArrayList<Images> imagesArrayList = new ArrayList<>(); try { JSONArray jsonArray = new JSONArray(imaData); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); String sURL = jsonObject.getString("url"); String sAuthor = jsonObject.getString("author"); Images images = new Images(sURL, sAuthor); imagesArrayList.add(images); } } catch (Exception e) { e.printStackTrace(); } return imagesArrayList; } }
|
3.使用
因为Android网络操作不能在主线程中使用,将其放入另一个线程开启。
1 2 3 4 5 6
| class ImaThread implements Runnable { public void run() { msg = HttpUtils.getServer(StaticData.getImgServer()); } }
|
合适的地方使用,我采取了在启动动画中解析。
1 2 3
| Thread imaThread = new Thread(new ImaThread()); imaThread.start(); ArrayList<Images> imagesArrayList = ImageParse.imageParse(msg);
|
五、后
这样,简单的与服务器通信功能就写好了。
同样的,你还可以使用AES加密等方式给ID、pwd加密,从而实现登陆的操作。
有不好的地方欢迎大家指出,祝好!