HarmonyOS应用开发--社区型APP文化乡道[V2.1.0版][API V6]
HarmonyOS应用开发--社区型APP文化乡道[V2.1.0版][API V6]
- 1. 名称
- 2. 系统设计
-
- 2.1 功能描述
- 2.2 前后端概述
- 2.3 总体设计
- 2.4 数据库设计
-
- 2.4.1 概念结构设计
- 2.4.2 逻辑结构设计
- 2.4.3 物理结构设计
-
- a.USERS表
- b.FIELD表
- c.USER_CONTENTS表
- d.AGREE表
- e.COLLECT表
- f.DISCUSS表
- 2.5 详细设计
- 2.5.1 UI界面-V2.1.1版
- 2.5.2 流程图(部分示意)
- 3. app实现关键技巧
- 4. 源代码
-
- 4.0 APP客户端工程文件结构
- 4.1 Java主要源代码
-
- 4.1.1 DataCenterControl.java
- 4.1.2 MyTools.java
- 5. 服务器端python源代码
-
- 5.1 createDataBaseAndTables.py
- 5.2 views.py
- 5.3 urls.py
- 6. app运行视频(V2.0.0本地模拟器运行)
1. 名称
- 本次使用Java UI开发模式实现了一个社区型APP,命名为:文化乡道,RuralCommunity。
- 采用C/S架构+B/S架构,其中以C/S为主、B/S为辅,混合架构。
- 项目已经放置在Gitee仓库中:RuralCommunity-这里只放V2.0.0版本。
- 项目已经放置在Gitee仓库中:RuralCommunity-这里放后续开发版本。
- 代码规模:APP客户端:JAVA代码达6000余行、XML界面代码达2100余行;服务器端:python 代码达1500余行。
- 本专栏关于使用开发语言的声明:全专栏专注于Java语言开发模式!
- app图标:
- APP页面结构:
2. 系统设计
2.1 功能描述
APP客户端具备:
- 发布内容、删除内容
- 点赞、取消点赞
- 收藏、取消收藏
- 关注、取消关注
- 评论
2.2 前后端概述
【1】APP客户端:
采用JAVA UI开发模式,使用单个MainAbility,该MainAbility包含14个AbilitySlice。
其中,在MainAbilitySlice中采用的上、中、下三段式页面结构。上、中可以使用XML动态装载技术,根据下部的TabLiist导航tab不同,去装载不同的上、中子布局。
在APP客户端中,只涉及用户个人注册信息的存储,使用鸿蒙API给出的基于XML的轻量偏好型键值对数据库去存储。
【2】服务器端:
采用python django 3.2,使用MVT模式中的V,在views.py中直接导入pymysql模块,直接拼接字符串,去执行SQL语句即可,总共设计了24个网络接口,在后续章节给出。
数据库方面,采用Mysql 8,特别的,需要使用其json数据存储类型。
2.3 总体设计
【用户指令处理】(1)登录指令(2)注册指令(3)销毁指令(4)全站动态请求指令(5)全站项目请求指令(6)全站文章请求指令(7)全站领域请求指令(8)内容阅读指令(9)点赞指令(10)取消点赞指令(11)收藏指令(12)取消收藏指令(13)评论指令(14)关注指令(15) 取消关注指令(16)用户内容发布指令(17)用户内容删除指令(18)请求用户消息列表指令(19)请求用户内容列表指令(20)请求内容评论列表指令(21)请求用户关注数量、粉丝数量、阅读数量指令(22)搜索用户指令(23)请求关注列表指令(24)请求粉丝列表指令
2.4 数据库设计
2.4.1 概念结构设计
2.4.2 逻辑结构设计
(1)用户(用户账号,密码,邮箱,年龄,性别), 主码:用户账号;(2)点赞(点赞编号,点赞时间,内容编号,用户账号), 主码:点赞编号,外码:内容编号、用户账号;(3)领域(领域编号、领域名称),主码:领域编号。(4)用户内容(内容编号,内容类别,发表日期,内容详情,阅读量,用户账号,领域编号), 主码:内容编号,外码:用户账号、领域编号;(5)评论(评论编号,评论详情,评论时间,内容编号,用户账号), 主码:评论编号,外码:内容编号、用户账号;(6)收藏(收藏编号,收藏时间,内容编号,用户账号), 主码:收藏编号,外码:内容编号、用户账号。
2.4.3 物理结构设计
在MySql 8环境中,设计数据库表如下:
a.USERS表
b.FIELD表
c.USER_CONTENTS表
d.AGREE表
e.COLLECT表
f.DISCUSS表
2.5 详细设计
2.5.1 UI界面-V2.1.1版
2.5.2 流程图(部分示意)
-
APP客户端:登录流程图
-
服务器端:登录流程图
-
APP客户端:内容发布流程图
-
服务器端:关注指令处理
3. app实现关键技巧
- 在APP中,采用了一个“数据中心”模式,即有一个类里面全是静态类型。
用于充当应用内软总线,就如同提线木偶,该数据中心把其他的类“牵在手中”。 - 鸿蒙的网络请求必须放在另外的线程中,不能在UI主线程中。
因此,在其他线程中请求网络,当获取到服务器端返回的结果,依据此结果,使用UI任务分发器,向UI主线程中使用异步方式派发任务,让UI主线程更新UI界面,即可实现服务器端与APP客户端的交互。
4. 源代码
4.0 APP客户端工程文件结构
4.1 Java主要源代码
4.1.1 DataCenterControl.java
package com.tdtxdcxm.ruralcommunity.appruntime;import com.tdtxdcxm.ruralcommunity.ResourceTable;import com.tdtxdcxm.ruralcommunity.items.LCArryListContentItem;import com.tdtxdcxm.ruralcommunity.items.LCArryListNormalItem;import com.tdtxdcxm.ruralcommunity.providers.LCProviderForContent;import com.tdtxdcxm.ruralcommunity.providers.LCProviderForNormal;import com.tdtxdcxm.ruralcommunity.providers.PSProvider;import ohos.aafwk.ability.AbilitySlice;import ohos.agp.components.DirectionalLayout;import ohos.agp.components.LayoutScatter;import ohos.agp.components.webengine.WebView;import java.util.ArrayList;public class DataCenterControl { //这里是数据指挥中心,程序内软数据总线 private DataCenterControl(){} public static String messageNoticeUrlString = "https://www.gitee.com/";//消息——通知所加载的html网页地址 public static String serverIpWithPort = "http:127.0.0.1:8000/";//服务器地址,写上自己服务器的公网IP+端口号 public static WebView webView = null; public static String userName = ""; public static String age = ""; public static String gender = ""; public static String followsum = ""; public static String fanssum = ""; public static String readvalue = ""; public static final String[] fields = {"艺","衣","食","住","行","学","文"}; //首页-中间区域-pageslider每一页的子布局数据源列表 public static final ArrayList<DirectionalLayout> firstcenter_pageslist = new ArrayList<>(); //领域-中间区域-pageslider每一页的子布局数据源列表 public static final ArrayList<DirectionalLayout> secondcenter_pageslist = new ArrayList<>(); //消息-中间区域-pageslider每一页的子布局数据源列表 public static final ArrayList<DirectionalLayout> fourthcenter_pageslist = new ArrayList<>(); public static final ArrayList<LCArryListContentItem> worlddt_listcontainer_list = new ArrayList<>(); public static final ArrayList<LCArryListContentItem> worldxm_listcontainer_list = new ArrayList<>(); public static final ArrayList<LCArryListContentItem> worldwz_listcontainer_list = new ArrayList<>(); public static final ArrayList<LCArryListContentItem> art_listcontainer_list = new ArrayList<>(); public static final ArrayList<LCArryListContentItem> clothe_listcontainer_list = new ArrayList<>(); public static final ArrayList<LCArryListContentItem> food_listcontainer_list = new ArrayList<>(); public static final ArrayList<LCArryListContentItem> house_listcontainer_list = new ArrayList<>(); public static final ArrayList<LCArryListContentItem> traffic_listcontainer_list = new ArrayList<>(); public static final ArrayList<LCArryListContentItem> study_listcontainer_list = new ArrayList<>(); public static final ArrayList<LCArryListContentItem> culture_listcontainer_list = new ArrayList<>(); public static final ArrayList<LCArryListNormalItem> messageagree_listcontainer_list = new ArrayList<>(); public static final ArrayList<LCArryListNormalItem> messagediscuss_listcontainer_list = new ArrayList<>(); public static final ArrayList<LCArryListNormalItem> messagecollect_listcontainer_list = new ArrayList<>(); public static final ArrayList<LCArryListNormalItem> follow_listcontainer_list = new ArrayList<>(); public static final ArrayList<LCArryListNormalItem> fans_listcontainer_list = new ArrayList<>(); public static final ArrayList<LCArryListNormalItem> discuss_listcontainer_list = new ArrayList<>(); public static final ArrayList<LCArryListNormalItem> people_listcontainer_list = new ArrayList<>(); public static final ArrayList<LCArryListContentItem> userdt_listcontainer_list = new ArrayList<>(); public static final ArrayList<LCArryListContentItem> userxm_listcontainer_list = new ArrayList<>(); public static final ArrayList<LCArryListContentItem> userwz_listcontainer_list = new ArrayList<>(); public static final ArrayList<LCArryListContentItem> usercollect_listcontainer_list = new ArrayList<>(); public static LCProviderForContent worldDtListContainerProvider = null; public static LCProviderForContent worldXmListContainerProvider = null; public static LCProviderForContent worldWzListContainerProvider = null; public static LCProviderForContent artListContainerProvider = null; public static LCProviderForContent clotheListContainerProvider = null; public static LCProviderForContent foodListContainerProvider = null; public static LCProviderForContent houseListContainerProvider = null; public static LCProviderForContent trafficListContainerProvider = null; public static LCProviderForContent studyListContainerProvider = null; public static LCProviderForContent cultureListContainerProvider = null; public static LCProviderForNormal messageAgreeListContainerProvider = null; public static LCProviderForNormal messageDiscussListContainerProvider = null; public static LCProviderForNormal messageCollectListContainerProvider = null; public static LCProviderForNormal followAndFanaListListContainerProvider = null; public static LCProviderForNormal discussListContainerProvider = null; public static LCProviderForNormal peopleListContainerProvider = null; public static LCProviderForContent userDtListContainerProvider = null; public static LCProviderForContent userXmListContainerProvider = null; public static LCProviderForContent userWzListContainerProvider = null; public static LCProviderForContent userCollectListContainerProvider = null; public static PSProvider firstcenter_pgSliderProvider = null; public static PSProvider secondcenter_pgSliderProvider = null; public static PSProvider fourthcenter_pgSliderProvider = null; public static void addDataToPagesList(AbilitySlice abilitySlice,int n,int typeN){ switch (typeN) { case 0: firstcenter_pageslist.clear(); for (int i = 0; i < n; i++) { DirectionalLayout directionalLayout = (DirectionalLayout) LayoutScatter.getInstance(abilitySlice.getContext()).parse(ResourceTable.Layout_pageslider_item_listcontainer,null,false); firstcenter_pageslist.add(directionalLayout); } break; case 1: secondcenter_pageslist.clear(); for (int i = 0; i < n; i++) { DirectionalLayout directionalLayout = (DirectionalLayout) LayoutScatter.getInstance(abilitySlice.getContext()).parse(ResourceTable.Layout_pageslider_item_listcontainer,null,false); secondcenter_pageslist.add(directionalLayout); } break; case 2: break; case 3: fourthcenter_pageslist.clear(); for (int i = 0; i < n; i++) { if(i == 0){ DirectionalLayout directionalLayout = (DirectionalLayout) LayoutScatter .getInstance(abilitySlice.getContext()) .parse(ResourceTable.Layout_pageslider_item_webview,null,false); fourthcenter_pageslist.add(directionalLayout); continue; } DirectionalLayout directionalLayout = (DirectionalLayout) LayoutScatter.getInstance(abilitySlice.getContext()).parse(ResourceTable.Layout_pageslider_item_listcontainer,null,false); fourthcenter_pageslist.add(directionalLayout); } break; default: break; } }}
4.1.2 MyTools.java
package com.tdtxdcxm.ruralcommunity.myutils;import com.tdtxdcxm.ruralcommunity.appruntime.DataCenterControl;import com.tdtxdcxm.ruralcommunity.appruntime.UserConfigInfo;import com.tdtxdcxm.ruralcommunity.httpmanagers.ThreadPoolUtil;import com.tdtxdcxm.ruralcommunity.items.LCArryListContentItem;import com.tdtxdcxm.ruralcommunity.items.LCArryListNormalItem;import com.tdtxdcxm.ruralcommunity.providers.LCProviderForContent;import com.tdtxdcxm.ruralcommunity.slice.*;import ohos.aafwk.ability.AbilitySlice;import ohos.aafwk.content.Intent;import ohos.aafwk.content.Operation;import ohos.agp.components.*;import ohos.agp.utils.LayoutAlignment;import ohos.agp.window.dialog.CommonDialog;import ohos.agp.window.dialog.IDialog;import ohos.agp.window.dialog.ToastDialog;import ohos.app.Context;import ohos.net.NetHandle;import ohos.net.NetManager;import ohos.net.NetStatusCallback;import ohos.utils.zson.ZSONObject;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLConnection;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;public class MyTools { private MyTools(){} /*<http构造表单上传注册数据区域*/ public static void UpDataRegeisterInfo(AbilitySlice slice, String[][] userinfo, Text reg_tstext, TextField reg_usernametfd, TextField reg_passwordtfd, TextField reg_email, RadioContainer reg_dll2_1_radiocontainer,TextField reg_nl){ NetManager main_toplistnetmanger = NetManager.getInstance(slice.getContext()); if (!main_toplistnetmanger.hasDefaultNet()) {return;} ThreadPoolUtil.submit(() -> { NetHandle thenetHandle = main_toplistnetmanger.getDefaultNet(); NetStatusCallback netStatusCallback = new NetStatusCallback() {}; HttpURLConnection httpURLConnection = null; String urlString = DataCenterControl.serverIpWithPort + "register/?"; try { URL url = new URL(urlString); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); URLConnection urlConnection = thenetHandle.openConnection(url, java.net.Proxy.NO_PROXY); if (urlConnection instanceof HttpURLConnection) { httpURLConnection = (HttpURLConnection) urlConnection; httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); StringBuilder stringBuilder = new StringBuilder(); for(int i = 0;i < userinfo.length;i++){ if(i == 0){stringBuilder.append(userinfo[0][0]);stringBuilder.append("=");stringBuilder.append(userinfo[0][1]);continue; } stringBuilder.append("&"); stringBuilder.append(userinfo[i][0]); stringBuilder.append("="); stringBuilder.append(userinfo[i][1]); } byte[] b = stringBuilder.toString().getBytes(); httpURLConnection.getOutputStream().write(b); try { httpURLConnection.connect(); } catch (IOException e) {} outputStream.flush(); try { InputStream inputStream = urlConnection.getInputStream(); byte[] cache = new byte[2 * 1024]; int len = inputStream.read(cache); while (len != -1) {outputStream.write(cache, 0, len);len = inputStream.read(cache); } } catch (IOException e) {} String result = ""; result = new String(outputStream.toByteArray()); if(result.equals("OK")){ DataCenterControl.userName = userinfo[0][1]; DataCenterControl.gender = userinfo[3][1]; DataCenterControl.age = userinfo[4][1]; slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { reg_tstext.setText("注册成功"); reg_usernametfd.setText(""); reg_passwordtfd.setText(""); reg_email.setText(""); reg_dll2_1_radiocontainer.cancelMarks(); reg_nl.setText(""); UserConfigInfo.pushData(slice.getContext(),userinfo);//将注册数据写入本地数据库 RegisterSlice.toanotherslice = true;} }); slice.present(new MainAbilitySlice(),new Intent()); } else{ slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { reg_tstext.setText("注册失败");} }); } } } catch (IOException e) {} finally { if (httpURLConnection != null) { httpURLConnection.disconnect(); } } }); } /http构造表单上传注册数据区域*>*/ /*<http构造表单上传注登录数据区域*/ public static void UpDataLoginInfo(AbilitySlice slice,String[] userinfo,String[][] userinfodown,Text log_tstext,TextField log_usernametfd,TextField log_passwordtfd){ NetManager main_toplistnetmanger = NetManager.getInstance(slice.getContext()); if (!main_toplistnetmanger.hasDefaultNet()) {return;} ThreadPoolUtil.submit(() -> { NetHandle thenetHandle = main_toplistnetmanger.getDefaultNet(); NetStatusCallback netStatusCallback = new NetStatusCallback() {}; HttpURLConnection httpURLConnection = null; String urlString = DataCenterControl.serverIpWithPort + "login/?"; try { URL url = new URL(urlString); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); URLConnection urlConnection = thenetHandle.openConnection(url, java.net.Proxy.NO_PROXY); if (urlConnection instanceof HttpURLConnection) { httpURLConnection = (HttpURLConnection) urlConnection; httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("username"); stringBuilder.append("="); stringBuilder.append(userinfo[0]); stringBuilder.append("&"); stringBuilder.append("password"); stringBuilder.append("="); stringBuilder.append(userinfo[1]); byte[] b = stringBuilder.toString().getBytes(); httpURLConnection.getOutputStream().write(b); try { httpURLConnection.connect(); } catch (IOException e) {} outputStream.flush(); try { InputStream inputStream = urlConnection.getInputStream(); byte[] cache = new byte[2 * 1024]; int len = inputStream.read(cache); while (len != -1) {outputStream.write(cache, 0, len);len = inputStream.read(cache); } } catch (IOException e) {} String result = ""; result = new String(outputStream.toByteArray()); String[] userinfos = result.split(","); if(userinfos[0].equals("OK")){ userinfodown[0][0] = "username"; userinfodown[0][1] = userinfos[1]; userinfodown[1][0] = "password"; userinfodown[1][1] = userinfos[2]; userinfodown[2][0] = "email"; userinfodown[2][1] = userinfos[3]; userinfodown[3][0] = "gender"; userinfodown[3][1] = userinfos[4]; userinfodown[4][0] = "age"; userinfodown[4][1] = userinfos[5]; UserConfigInfo.pushData(slice.getContext(),userinfodown); DataCenterControl.userName = userinfo[0]; slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { log_tstext.setText("登录成功"); log_usernametfd.setText(""); log_passwordtfd.setText(""); DataCenterControl.age = userinfos[5]; DataCenterControl.gender = userinfos[4]; LoginSlice.toanotherslice = true;} }); slice.present(new MainAbilitySlice(),new Intent()); } else{ if(userinfos[0].equals("NOT")){slice.getUITaskDispatcher().asyncDispatch(new Runnable() { @Override public void run() { log_tstext.setText("远程验证:账号未注册!"); }}); } if(userinfos[0].equals("NO")){slice.getUITaskDispatcher().asyncDispatch(new Runnable() { @Override public void run() { log_tstext.setText("远程验证:密码错误!"); }}); } } } } catch (IOException e) {} finally { if (httpURLConnection != null) { httpURLConnection.disconnect(); } } }); } /http构造表单上传登录数据区域*>*/ /*<http构造表单上传销毁指令数据区域*/ public static void UpDataDestoryInfo(AbilitySlice slice,String username){ NetManager main_toplistnetmanger = NetManager.getInstance(slice.getContext()); if (!main_toplistnetmanger.hasDefaultNet()) {return;} ThreadPoolUtil.submit(() -> { NetHandle thenetHandle = main_toplistnetmanger.getDefaultNet(); NetStatusCallback netStatusCallback = new NetStatusCallback() {}; HttpURLConnection httpURLConnection = null; String urlString = DataCenterControl.serverIpWithPort + "destory/?"; try { URL url = new URL(urlString); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); URLConnection urlConnection = thenetHandle.openConnection(url, java.net.Proxy.NO_PROXY); if (urlConnection instanceof HttpURLConnection) { httpURLConnection = (HttpURLConnection) urlConnection; httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("username"); stringBuilder.append("="); stringBuilder.append(username); byte[] b = stringBuilder.toString().getBytes(); httpURLConnection.getOutputStream().write(b); try { httpURLConnection.connect(); } catch (IOException e) {} outputStream.flush(); InputStream inputStream = null; try { inputStream = urlConnection.getInputStream(); byte[] cache = new byte[2 * 1024]; int len = inputStream.read(cache); while (len != -1) {outputStream.write(cache, 0, len);len = inputStream.read(cache); } } catch (IOException e) {} String result = ""; result = outputStream.toString(); if(result.equals("OK")){ //销毁成功 UserConfigInfo.deleteUserInfo(slice.getContext(),DataCenterControl.userName); DataCenterControl.userName = ""; ((MainAbilitySlice)slice).toanotherslice = true; slice.present(new StartPage(),new Intent()); } else{ slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { MyTools.toastShow("销毁失败", slice.getContext());} }); } } } catch (IOException e) {} finally { if (httpURLConnection != null) { httpURLConnection.disconnect(); } } }); } /http构造表单上传销毁指令数据区域*>*/ /*<http搜索用户数据区域*/ public static void UpDataSearchUserInfo(AbilitySlice slice, String username,String objectname){ NetManager main_toplistnetmanger = NetManager.getInstance(slice.getContext()); if (!main_toplistnetmanger.hasDefaultNet()) {return;} ThreadPoolUtil.submit(() -> { NetHandle thenetHandle = main_toplistnetmanger.getDefaultNet(); NetStatusCallback netStatusCallback = new NetStatusCallback() {}; HttpURLConnection httpURLConnection = null; String urlString = DataCenterControl.serverIpWithPort + "searchuser/?"; try { URL url = new URL(urlString); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); URLConnection urlConnection = thenetHandle.openConnection(url, java.net.Proxy.NO_PROXY); if (urlConnection instanceof HttpURLConnection) { httpURLConnection = (HttpURLConnection) urlConnection; httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("username="); stringBuilder.append(username); stringBuilder.append("&objectname="); stringBuilder.append(objectname); byte[] b = stringBuilder.toString().getBytes(); httpURLConnection.getOutputStream().write(b); try { httpURLConnection.connect(); } catch (IOException e) {} outputStream.flush(); InputStream inputStream = null; try { inputStream = urlConnection.getInputStream(); byte[] cache = new byte[2 * 1024]; int len = inputStream.read(cache); while (len != -1) {outputStream.write(cache, 0, len);len = inputStream.read(cache); } } catch (IOException e) {} String result = ""; result = outputStream.toString(); if(result.startsWith("OK")){ //搜索成功 String finalResult = result; slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { DataCenterControl.people_listcontainer_list.clear(); DataCenterControl.people_listcontainer_list.add(new LCArryListNormalItem(finalResult.substring(3))); if(DataCenterControl.peopleListContainerProvider != null){ DataCenterControl.peopleListContainerProvider.notifyDataChanged(); }} }); } else{ slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { MyTools.toastShow("搜索为空!", slice.getContext());} }); } } } catch (IOException e) {} finally { if (httpURLConnection != null) { httpURLConnection.disconnect(); } } }); } /http搜索用户数据区域*>*/ /*<http请求全站内容列表数据区域*/ public static void DownDataWorldListInfo(AbilitySlice slice,String type,String field){ NetManager main_toplistnetmanger = NetManager.getInstance(slice.getContext()); if (!main_toplistnetmanger.hasDefaultNet()) {return;} ThreadPoolUtil.submit(() -> { NetHandle thenetHandle = main_toplistnetmanger.getDefaultNet(); NetStatusCallback netStatusCallback = new NetStatusCallback() {}; HttpURLConnection httpURLConnection = null; String urlString = null; switch(type){ case "worlddt": urlString = DataCenterControl.serverIpWithPort + "worlddt/"; break; case "worldxm": urlString = DataCenterControl.serverIpWithPort + "worldxm/"; break; case "worldwz": urlString = DataCenterControl.serverIpWithPort + "worldwz/"; break; case "worldfield": urlString = DataCenterControl.serverIpWithPort + "worldfield/"; break; default: urlString = DataCenterControl.serverIpWithPort + "index/"; break; } try { URL url = new URL(urlString); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); URLConnection urlConnection = thenetHandle.openConnection(url, java.net.Proxy.NO_PROXY); if (urlConnection instanceof HttpURLConnection) { httpURLConnection = (HttpURLConnection) urlConnection; httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("field_id="); switch (field){ case "art":stringBuilder.append("1");break; case "clothe":stringBuilder.append("2");break; case "food":stringBuilder.append("3");break; case "house":stringBuilder.append("4");break; case "traffic":stringBuilder.append("5");break; case "study":stringBuilder.append("6");break; case "culture":stringBuilder.append("7");break; default:stringBuilder.append("0");break; } byte[] b = stringBuilder.toString().getBytes(); httpURLConnection.getOutputStream().write(b); try { httpURLConnection.connect(); } catch (IOException e) {} outputStream.flush(); InputStream inputStream = null; try { inputStream = urlConnection.getInputStream(); byte[] cache = new byte[2 * 1024]; int len = inputStream.read(cache); while (len != -1) {outputStream.write(cache, 0, len);len = inputStream.read(cache); } } catch (IOException e) {} String result = ""; result = outputStream.toString(); if(result.indexOf("sum") != -1){ //请求全站动态成功 String finalResult = result; slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { switch (type) { case "worlddt": ZSONObject zsonobject_dt = ZSONObject.stringToZSON(finalResult); int sum_dt = Integer.parseInt(zsonobject_dt.getString("sum")); DataCenterControl.worlddt_listcontainer_list.clear(); for(int i = 0;i < sum_dt;i++){ ZSONObject t = ZSONObject.stringToZSON(zsonobject_dt.getString(String.valueOf(i))); int detail_len = t.getString("DETAIL").length(); DataCenterControl.worlddt_listcontainer_list.add( new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL").substring(12,detail_len - 1 - 1).replace("\\n","\n") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1] ) ); } if(DataCenterControl.worldDtListContainerProvider != null){ DataCenterControl.worldDtListContainerProvider.notifyDataChanged(); } MyTools.toastShow("全站动态下载成功!", slice.getContext()); break; case "worldxm": ZSONObject zsonobject_xm = ZSONObject.stringToZSON(finalResult); int sum_xm = Integer.parseInt(zsonobject_xm.getString("sum")); DataCenterControl.worldxm_listcontainer_list.clear(); for(int i = 0;i < sum_xm;i++){ ZSONObject t = ZSONObject.stringToZSON(zsonobject_xm.getString(String.valueOf(i))); int detail_len = t.getString("DETAIL").length(); DataCenterControl.worldxm_listcontainer_list.add( new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1] ) ); } if(DataCenterControl.worldXmListContainerProvider != null){ DataCenterControl.worldXmListContainerProvider.notifyDataChanged(); } MyTools.toastShow("全站项目下载成功!", slice.getContext()); break; case "worldwz": ZSONObject zsonobject_wz = ZSONObject.stringToZSON(finalResult); int sum_wz = Integer.parseInt(zsonobject_wz.getString("sum")); DataCenterControl.worldwz_listcontainer_list.clear(); for(int i = 0;i < sum_wz;i++){ ZSONObject t = ZSONObject.stringToZSON(zsonobject_wz.getString(String.valueOf(i))); int detail_len = t.getString("DETAIL").length(); DataCenterControl.worldwz_listcontainer_list.add( new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL").substring(12,detail_len - 1 - 1).replace("\\n","\n") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1] ) ); } if(DataCenterControl.worldWzListContainerProvider != null){ DataCenterControl.worldWzListContainerProvider.notifyDataChanged(); } MyTools.toastShow("全站文章下载成功!", slice.getContext()); break; case "worldfield": switch (field){ case "art": ZSONObject zsonobject_art = ZSONObject.stringToZSON(finalResult); int sum_art = Integer.parseInt(zsonobject_art.getString("sum")); DataCenterControl.art_listcontainer_list.clear(); for(int i = 0;i < sum_art;i++){ ZSONObject t = ZSONObject.stringToZSON(zsonobject_art.getString(String.valueOf(i))); String field = t.getString("TYPE"); int detail_len = t.getString("DETAIL").length(); if(field.equals("动态") || field.equals("文章")){DataCenterControl.art_listcontainer_list.add( new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL").substring(12,detail_len - 1 - 1).replace("\\n","\n") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1] )); } if(field.equals("项目")){DataCenterControl.art_listcontainer_list.add( new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1] )); } } if(DataCenterControl.artListContainerProvider != null){ DataCenterControl.artListContainerProvider.notifyDataChanged(); } MyTools.toastShow("[艺]下载成功!", slice.getContext()); break; case "clothe": ZSONObject zsonobject_clothe = ZSONObject.stringToZSON(finalResult); int sum_clothe = Integer.parseInt(zsonobject_clothe.getString("sum")); DataCenterControl.clothe_listcontainer_list.clear(); for(int i = 0;i < sum_clothe;i++){ ZSONObject t = ZSONObject.stringToZSON(zsonobject_clothe.getString(String.valueOf(i))); String field = t.getString("TYPE"); int detail_len = t.getString("DETAIL").length(); if(field.equals("动态") || field.equals("文章")){DataCenterControl.clothe_listcontainer_list.add( new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL").substring(12,detail_len - 1 - 1).replace("\\n","\n") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1] )); } if(field.equals("项目")){DataCenterControl.clothe_listcontainer_list.add( new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1] )); } } if(DataCenterControl.clotheListContainerProvider != null){ DataCenterControl.clotheListContainerProvider.notifyDataChanged(); } MyTools.toastShow("[衣]下载成功!", slice.getContext()); break; case "food": ZSONObject zsonobject_food = ZSONObject.stringToZSON(finalResult); int sum_food = Integer.parseInt(zsonobject_food.getString("sum")); DataCenterControl.food_listcontainer_list.clear(); for(int i = 0;i < sum_food;i++){ ZSONObject t = ZSONObject.stringToZSON(zsonobject_food.getString(String.valueOf(i))); String field = t.getString("TYPE"); int detail_len = t.getString("DETAIL").length(); if(field.equals("动态") || field.equals("文章")){DataCenterControl.food_listcontainer_list.add( new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL").substring(12,detail_len - 1 - 1).replace("\\n","\n") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1] )); } if(field.equals("项目")){DataCenterControl.food_listcontainer_list.add( new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1] )); } } if(DataCenterControl.foodListContainerProvider != null){ DataCenterControl.foodListContainerProvider.notifyDataChanged(); } MyTools.toastShow("[食]下载成功!", slice.getContext()); break; case "house": ZSONObject zsonobject_house = ZSONObject.stringToZSON(finalResult); int sum_house = Integer.parseInt(zsonobject_house.getString("sum")); DataCenterControl.house_listcontainer_list.clear(); for(int i = 0;i < sum_house;i++){ ZSONObject t = ZSONObject.stringToZSON(zsonobject_house.getString(String.valueOf(i))); String field = t.getString("TYPE"); int detail_len = t.getString("DETAIL").length(); if(field.equals("动态") || field.equals("文章")){DataCenterControl.house_listcontainer_list.add( new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL").substring(12,detail_len - 1 - 1).replace("\\n","\n") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1] )); } if(field.equals("项目")){DataCenterControl.house_listcontainer_list.add( new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1] )); } } if(DataCenterControl.houseListContainerProvider != null){ DataCenterControl.houseListContainerProvider.notifyDataChanged(); } MyTools.toastShow("[住]下载成功!", slice.getContext()); break; case "traffic": ZSONObject zsonobject_traffic = ZSONObject.stringToZSON(finalResult); int sum_traffic = Integer.parseInt(zsonobject_traffic.getString("sum")); DataCenterControl.traffic_listcontainer_list.clear(); for(int i = 0;i < sum_traffic;i++){ ZSONObject t = ZSONObject.stringToZSON(zsonobject_traffic.getString(String.valueOf(i))); String field = t.getString("TYPE"); int detail_len = t.getString("DETAIL").length(); if(field.equals("动态") || field.equals("文章")){DataCenterControl.traffic_listcontainer_list.add( new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL").substring(12,detail_len - 1 - 1).replace("\\n","\n") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1] )); } if(field.equals("项目")){DataCenterControl.traffic_listcontainer_list.add( new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1] )); } } if(DataCenterControl.trafficListContainerProvider != null){ DataCenterControl.trafficListContainerProvider.notifyDataChanged(); } MyTools.toastShow("[行]下载成功!", slice.getContext()); break; case "study": ZSONObject zsonobject_study = ZSONObject.stringToZSON(finalResult); int sum_study = Integer.parseInt(zsonobject_study.getString("sum")); DataCenterControl.study_listcontainer_list.clear(); for(int i = 0;i < sum_study;i++){ ZSONObject t = ZSONObject.stringToZSON(zsonobject_study.getString(String.valueOf(i))); String field = t.getString("TYPE"); int detail_len = t.getString("DETAIL").length(); if(field.equals("动态") || field.equals("文章")){DataCenterControl.study_listcontainer_list.add( new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL").substring(12,detail_len - 1 - 1).replace("\\n","\n") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1] )); } if(field.equals("项目")){DataCenterControl.study_listcontainer_list.add( new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1] )); } } if(DataCenterControl.studyListContainerProvider != null){ DataCenterControl.studyListContainerProvider.notifyDataChanged(); } MyTools.toastShow("[学]下载成功!", slice.getContext()); break; case "culture": ZSONObject zsonobject_culture = ZSONObject.stringToZSON(finalResult); int sum_culture = Integer.parseInt(zsonobject_culture.getString("sum")); DataCenterControl.culture_listcontainer_list.clear(); for(int i = 0;i < sum_culture;i++){ ZSONObject t = ZSONObject.stringToZSON(zsonobject_culture.getString(String.valueOf(i))); String field = t.getString("TYPE"); int detail_len = t.getString("DETAIL").length(); if(field.equals("动态") || field.equals("文章")){DataCenterControl.culture_listcontainer_list.add( new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL").substring(12,detail_len - 1 - 1).replace("\\n","\n") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1] )); } if(field.equals("项目")){DataCenterControl.culture_listcontainer_list.add( new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1] )); } } if(DataCenterControl.cultureListContainerProvider != null){ DataCenterControl.cultureListContainerProvider.notifyDataChanged(); } MyTools.toastShow("[文]下载成功!", slice.getContext()); break; default: break; } break; default: MyTools.toastShow("全站未知下载成功!", slice.getContext()); break; }} }); } else if(result.equals("NULL")){ slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { MyTools.toastShow("全站内容为空!", slice.getContext());} }); } else{ slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { switch (type) { case "worlddt": MyTools.toastShow("全站动态下载失败!", slice.getContext()); break; case "worldxm": MyTools.toastShow("全站项目下载失败!", slice.getContext()); break; case "worldwz": MyTools.toastShow("全站文章下载失败!", slice.getContext()); break; default: MyTools.toastShow("全站未知下载失败!", slice.getContext()); break; }} }); } } } catch (IOException e) {} finally { if (httpURLConnection != null) { httpURLConnection.disconnect(); } } }); } /http请求全站内容列表数据区域*>*/ /*<http请求用户点赞、评论、收藏消息数据区域*/ public static void DownDataMessageListInfo(AbilitySlice slice,String type){ NetManager main_toplistnetmanger = NetManager.getInstance(slice.getContext()); if (!main_toplistnetmanger.hasDefaultNet()) {return;} ThreadPoolUtil.submit(() -> { NetHandle thenetHandle = main_toplistnetmanger.getDefaultNet(); NetStatusCallback netStatusCallback = new NetStatusCallback() {}; HttpURLConnection httpURLConnection = null; String urlString = DataCenterControl.serverIpWithPort + "message/?"; try { URL url = new URL(urlString); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); URLConnection urlConnection = thenetHandle.openConnection(url, java.net.Proxy.NO_PROXY); if (urlConnection instanceof HttpURLConnection) { httpURLConnection = (HttpURLConnection) urlConnection; httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("username="); stringBuilder.append(DataCenterControl.userName); stringBuilder.append("&messagetype="); switch(type){ case "messageagree":stringBuilder.append("AGREE");break; case "messagediscuss":stringBuilder.append("DISCUSS");break; case "messagecollect":stringBuilder.append("COLLECT");break; default:break; } byte[] b = stringBuilder.toString().getBytes(); httpURLConnection.getOutputStream().write(b); try { httpURLConnection.connect(); } catch (IOException e) {} outputStream.flush(); InputStream inputStream = null; try { inputStream = urlConnection.getInputStream(); byte[] cache = new byte[2 * 1024]; int len = inputStream.read(cache); while (len != -1) {outputStream.write(cache, 0, len);len = inputStream.read(cache); } } catch (IOException e) {} String result = ""; result = outputStream.toString(); if(result.indexOf("sum") != -1){ String finalResult = result; switch (type) {case "messageagree": ZSONObject zsonobject_agree = ZSONObject.stringToZSON(finalResult); int sum_agree = Integer.parseInt(zsonobject_agree.getString("sum")); DataCenterControl.messageagree_listcontainer_list.clear(); for(int i = 0;i < sum_agree;i++){ String info = zsonobject_agree.getString(String.valueOf(i)); DataCenterControl.messageagree_listcontainer_list.add(new LCArryListNormalItem(info)); } break;case "messagediscuss": ZSONObject zsonobject_discuss = ZSONObject.stringToZSON(finalResult); int sum_discuss = Integer.parseInt(zsonobject_discuss.getString("sum")); DataCenterControl.messagediscuss_listcontainer_list.clear(); for(int i = 0;i < sum_discuss;i++){ String info = zsonobject_discuss.getString(String.valueOf(i)); DataCenterControl.messagediscuss_listcontainer_list.add(new LCArryListNormalItem(info)); } break;case "messagecollect": ZSONObject zsonobject_collect = ZSONObject.stringToZSON(finalResult); int sum_collect = Integer.parseInt(zsonobject_collect.getString("sum")); DataCenterControl.messagecollect_listcontainer_list.clear(); for(int i = 0;i < sum_collect;i++){ String info = zsonobject_collect.getString(String.valueOf(i)); DataCenterControl.messagecollect_listcontainer_list.add(new LCArryListNormalItem(info)); } break;default: break; } slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { switch (type) { case "messageagree": if(DataCenterControl.messageAgreeListContainerProvider != null){ DataCenterControl.messageAgreeListContainerProvider.notifyDataChanged(); } MyTools.toastShow("用户点赞消息下载成功!", slice.getContext()); break; case "messagediscuss": if(DataCenterControl.messageDiscussListContainerProvider != null){ DataCenterControl.messageDiscussListContainerProvider.notifyDataChanged(); } MyTools.toastShow("用户评论消息下载成功!", slice.getContext()); break; case "messagecollect": if(DataCenterControl.messageCollectListContainerProvider != null){ DataCenterControl.messageCollectListContainerProvider.notifyDataChanged(); } MyTools.toastShow("用户收藏消息下载成功!", slice.getContext()); break; default: MyTools.toastShow("全站未知下载成功!",slice.getContext()); break; }} }); } else if(result.equals("NULL")){ slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { switch (type) { case "messageagree": DataCenterControl.messageagree_listcontainer_list.clear(); if(DataCenterControl.messageAgreeListContainerProvider != null){ DataCenterControl.messageAgreeListContainerProvider.notifyDataChanged(); } break; case "messagediscuss": DataCenterControl.messagediscuss_listcontainer_list.clear(); if(DataCenterControl.messageDiscussListContainerProvider != null){ DataCenterControl.messageDiscussListContainerProvider.notifyDataChanged(); } break; case "messagecollect": DataCenterControl.messagecollect_listcontainer_list.clear(); if(DataCenterControl.messageCollectListContainerProvider != null){ DataCenterControl.messageCollectListContainerProvider.notifyDataChanged(); } break; } MyTools.toastShow("用户消息为空!", slice.getContext());} }); } else{ slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { switch (type) { case "messageagree": MyTools.toastShow("用户点赞消息下载失败!", slice.getContext()); break; case "messagediscuss": MyTools.toastShow("用户评论消息下载失败!", slice.getContext()); break; case "messagecollect": MyTools.toastShow("用户收藏下载失败!", slice.getContext()); break; default: MyTools.toastShow("用户未知消息下载失败!", slice.getContext()); break; }} }); } } } catch (IOException e) {} finally { if (httpURLConnection != null) { httpURLConnection.disconnect(); } } }); } /http请求用户点赞、评论、收藏消息数据区域*>*/ /*<http发送关注或取消关注指令区域*/ public static void UpDataFollowInfo(AbilitySlice slice, Component component, String user_id, int i, String operation){ NetManager main_toplistnetmanger = NetManager.getInstance(slice.getContext()); if (!main_toplistnetmanger.hasDefaultNet()) {return;} ThreadPoolUtil.submit(() -> { NetHandle thenetHandle = main_toplistnetmanger.getDefaultNet(); NetStatusCallback netStatusCallback = new NetStatusCallback() {}; HttpURLConnection httpURLConnection = null; String urlString = ""; if(operation.equals("关注")){ urlString = DataCenterControl.serverIpWithPort + "follow/?"; } if(operation.equals("取消关注")){ urlString = DataCenterControl.serverIpWithPort + "unfollow/?"; } try { URL url = new URL(urlString); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); URLConnection urlConnection = thenetHandle.openConnection(url, java.net.Proxy.NO_PROXY); if (urlConnection instanceof HttpURLConnection) { httpURLConnection = (HttpURLConnection) urlConnection; httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("username="); stringBuilder.append(DataCenterControl.userName); stringBuilder.append("&user_id="); stringBuilder.append(user_id); byte[] b = stringBuilder.toString().getBytes(); httpURLConnection.getOutputStream().write(b); try { httpURLConnection.connect(); } catch (IOException e) {} outputStream.flush(); InputStream inputStream = null; try { inputStream = urlConnection.getInputStream(); byte[] cache = new byte[2 * 1024]; int len = inputStream.read(cache); while (len != -1) {outputStream.write(cache, 0, len);len = inputStream.read(cache); } } catch (IOException e) {} String result = ""; result = outputStream.toString(); String[] tosettext = {"","",""}; if(result.equals("OK")){ if(operation.equals("关注")){slice.getUITaskDispatcher().asyncDispatch(new Runnable() { @Override public void run() { //i是-1是代表是搜索用户结果列表的中操作,i是-2是代表内容详情页中的操作 if(i == -1){ DataCenterControl.people_listcontainer_list.get(0).setContent(user_id+"[已关注]"); DataCenterControl.peopleListContainerProvider.notifyDataChanged(); } else if(i == -2){ ((Text)component).setText("已关注"); } MyTools.toastShow("已关注",slice.getContext()); }}); } if(operation.equals("取消关注")){slice.getUITaskDispatcher().asyncDispatch(new Runnable() { @Override public void run() { //i是-1是代表是搜索用户结果列表的中操作,i是-2是代表内容详情页中的操作,其余i是大于等于0是代表用户关注列表中的操作 if(i == -1){ DataCenterControl.people_listcontainer_list.remove(0); DataCenterControl.peopleListContainerProvider.notifyDataChanged(); } else if(i == -2){ ((Text)component).setText("关注"); } else{ DataCenterControl.follow_listcontainer_list.remove(i); DataCenterControl.followAndFanaListListContainerProvider.notifyDataChanged(); } MyTools.toastShow("已取消关注",slice.getContext()); }}); } } } } catch (IOException e) {} finally { if (httpURLConnection != null) { httpURLConnection.disconnect(); } } }); } /http发送关注或取消关注指令区域*>*/ /*<http请求关注数目、粉丝数目、阅读数目数据区域*/ public static void DownDataFollowFansReadvalueInfo(AbilitySlice slice,String username,Text[] followfansread){ NetManager main_toplistnetmanger = NetManager.getInstance(slice.getContext()); if (!main_toplistnetmanger.hasDefaultNet()) {return;} ThreadPoolUtil.submit(() -> { NetHandle thenetHandle = main_toplistnetmanger.getDefaultNet(); NetStatusCallback netStatusCallback = new NetStatusCallback() {}; HttpURLConnection httpURLConnection = null; String urlString = DataCenterControl.serverIpWithPort + "count/?"; try { URL url = new URL(urlString); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); URLConnection urlConnection = thenetHandle.openConnection(url, java.net.Proxy.NO_PROXY); if (urlConnection instanceof HttpURLConnection) { httpURLConnection = (HttpURLConnection) urlConnection; httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("username"); stringBuilder.append("="); stringBuilder.append(username); byte[] b = stringBuilder.toString().getBytes(); httpURLConnection.getOutputStream().write(b); try { httpURLConnection.connect(); } catch (IOException e) {} outputStream.flush(); InputStream inputStream = null; try { inputStream = urlConnection.getInputStream(); byte[] cache = new byte[2 * 1024]; int len = inputStream.read(cache); while (len != -1) {outputStream.write(cache, 0, len);len = inputStream.read(cache); } } catch (IOException e) {} String result = ""; result = outputStream.toString(); if(result.startsWith("OK")){ String[] numbers = result.substring(3).split(","); if(followfansread != null){slice.getUITaskDispatcher().asyncDispatch(new Runnable() { @Override public void run() { followfansread[0].setText(numbers[0]); followfansread[1].setText(numbers[1]); followfansread[2].setText(numbers[2]); }}); } } else{ slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { MyTools.toastShow("计数请求失败", slice.getContext());} }); } } } catch (IOException e) {} finally { if (httpURLConnection != null) { httpURLConnection.disconnect(); } } }); } /http请求关注数目、粉丝数目、阅读数目数据区域*>*/ /*<http下载用户关注和粉丝列表据区域*/ public static void DownDataFollowAndFanslistInfo(AbilitySlice slice,String username,String type){ NetManager main_toplistnetmanger = NetManager.getInstance(slice.getContext()); if (!main_toplistnetmanger.hasDefaultNet()) {return;} ThreadPoolUtil.submit(() -> { NetHandle thenetHandle = main_toplistnetmanger.getDefaultNet(); NetStatusCallback netStatusCallback = new NetStatusCallback() {}; HttpURLConnection httpURLConnection = null; String urlString = null; switch (type) { case "followlist": urlString = DataCenterControl.serverIpWithPort + "followlist/?"; break; case "fanslist": urlString = DataCenterControl.serverIpWithPort + "fanslist/?"; break; default: urlString = DataCenterControl.serverIpWithPort + "inedx/?"; break; } try { URL url = new URL(urlString); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); URLConnection urlConnection = thenetHandle.openConnection(url, java.net.Proxy.NO_PROXY); if (urlConnection instanceof HttpURLConnection) { httpURLConnection = (HttpURLConnection) urlConnection; httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("username="); stringBuilder.append(username); byte[] b = stringBuilder.toString().getBytes(); httpURLConnection.getOutputStream().write(b); try { httpURLConnection.connect(); } catch (IOException e) {} outputStream.flush(); InputStream inputStream = null; try { inputStream = urlConnection.getInputStream(); byte[] cache = new byte[2 * 1024]; int len = inputStream.read(cache); while (len != -1) {outputStream.write(cache, 0, len);len = inputStream.read(cache); } } catch (IOException e) {} String result = ""; result = outputStream.toString(); if(result.indexOf("sum") != -1){ //搜索成功 String finalResult = result; switch (type){case "followlist": DataCenterControl.follow_listcontainer_list.clear(); ZSONObject zsonobject_follow = ZSONObject.stringToZSON(finalResult); int sum_follow = Integer.parseInt(zsonobject_follow.getString("sum")); for(int i = 0;i < sum_follow;i++){ String info = zsonobject_follow.getString(String.valueOf(i)); DataCenterControl.follow_listcontainer_list.add(new LCArryListNormalItem(info)); } slice.getUITaskDispatcher().asyncDispatch(new Runnable() { @Override public void run() { if(DataCenterControl.followAndFanaListListContainerProvider != null){ DataCenterControl.followAndFanaListListContainerProvider.notifyDataChanged(); } MyTools.toastShow("关注列表下载成功!", slice.getContext()); } }); break;case "fanslist": DataCenterControl.fans_listcontainer_list.clear(); ZSONObject zsonobject_fans = ZSONObject.stringToZSON(finalResult); int sum_fans = Integer.parseInt(zsonobject_fans.getString("sum")); for(int i = 0;i < sum_fans;i++){ String info = zsonobject_fans.getString(String.valueOf(i)); DataCenterControl.fans_listcontainer_list.add(new LCArryListNormalItem(info)); } slice.getUITaskDispatcher().asyncDispatch(new Runnable() { @Override public void run() { if(DataCenterControl.followAndFanaListListContainerProvider != null){ DataCenterControl.followAndFanaListListContainerProvider.notifyDataChanged(); } MyTools.toastShow("粉丝列表下载成功!", slice.getContext()); } }); break;default: break; } } else{ slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { MyTools.toastShow("好友为空!", slice.getContext());} }); } } } catch (IOException e) {} finally { if (httpURLConnection != null) { httpURLConnection.disconnect(); } } }); } /http下载用户关注和粉丝列表据区域*>*/ /*<http请求用户内容列表与收藏列表数据区域*/ public static void DownDataUserContentListInfo(AbilitySlice slice,String type){ NetManager main_toplistnetmanger = NetManager.getInstance(slice.getContext()); if (!main_toplistnetmanger.hasDefaultNet()) {return;} ThreadPoolUtil.submit(() -> { NetHandle thenetHandle = main_toplistnetmanger.getDefaultNet(); NetStatusCallback netStatusCallback = new NetStatusCallback() {}; HttpURLConnection httpURLConnection = null; String urlString = DataCenterControl.serverIpWithPort + "usercontentlist/?"; try { URL url = new URL(urlString); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); URLConnection urlConnection = thenetHandle.openConnection(url, java.net.Proxy.NO_PROXY); if (urlConnection instanceof HttpURLConnection) { httpURLConnection = (HttpURLConnection) urlConnection; httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("username="); stringBuilder.append(DataCenterControl.userName); stringBuilder.append("&type="); switch(type){ case "dtlist":stringBuilder.append("dtlist");break; case "xmlist":stringBuilder.append("xmlist");break; case "wzlist":stringBuilder.append("wzlist");break; case "collectlist":stringBuilder.append("collectlist");break; default:break; } byte[] b = stringBuilder.toString().getBytes(); httpURLConnection.getOutputStream().write(b); try { httpURLConnection.connect(); } catch (IOException e) {} outputStream.flush(); InputStream inputStream = null; try { inputStream = urlConnection.getInputStream(); byte[] cache = new byte[2 * 1024]; int len = inputStream.read(cache); while (len != -1) {outputStream.write(cache, 0, len);len = inputStream.read(cache); } } catch (IOException e) {} String result = ""; result = outputStream.toString(); if(result.indexOf("sum") != -1){ //请求全站动态成功 String finalResult = result; slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { switch (type) { case "dtlist": ZSONObject zsonobject_dt = ZSONObject.stringToZSON(finalResult); int sum_dt = Integer.parseInt(zsonobject_dt.getString("sum")); DataCenterControl.userdt_listcontainer_list.clear(); for(int i = 0;i < sum_dt;i++){ ZSONObject t = ZSONObject.stringToZSON(zsonobject_dt.getString(String.valueOf(i))); int detail_len = t.getString("DETAIL").length(); DataCenterControl.userdt_listcontainer_list.add( new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL").substring(12,detail_len - 1 - 1).replace("\\n","\n") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1] ) ); } if(DataCenterControl.userDtListContainerProvider != null){ DataCenterControl.userDtListContainerProvider.notifyDataChanged(); } MyTools.toastShow("用户动态下载成功!", slice.getContext()); break; case "xmlist": ZSONObject zsonobject_xm = ZSONObject.stringToZSON(finalResult); int sum_xm = Integer.parseInt(zsonobject_xm.getString("sum")); DataCenterControl.userxm_listcontainer_list.clear(); for(int i = 0;i < sum_xm;i++){ ZSONObject t = ZSONObject.stringToZSON(zsonobject_xm.getString(String.valueOf(i))); int detail_len = t.getString("DETAIL").length(); DataCenterControl.userxm_listcontainer_list.add( new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1] ) ); } if(DataCenterControl.userXmListContainerProvider != null){ DataCenterControl.userXmListContainerProvider.notifyDataChanged(); } MyTools.toastShow("用户项目下载成功!", slice.getContext()); break; case "wzlist": ZSONObject zsonobject_wz = ZSONObject.stringToZSON(finalResult); int sum_wz = Integer.parseInt(zsonobject_wz.getString("sum")); DataCenterControl.userwz_listcontainer_list.clear(); for(int i = 0;i < sum_wz;i++){ ZSONObject t = ZSONObject.stringToZSON(zsonobject_wz.getString(String.valueOf(i))); int detail_len = t.getString("DETAIL").length(); DataCenterControl.userwz_listcontainer_list.add( new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL").substring(12,detail_len - 1 - 1).replace("\\n","\n") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1] ) ); } if(DataCenterControl.userWzListContainerProvider != null){ DataCenterControl.userWzListContainerProvider.notifyDataChanged(); } MyTools.toastShow("用户文章下载成功!", slice.getContext()); break; case "collectlist": ZSONObject zsonobject_collect = ZSONObject.stringToZSON(finalResult); int sum_collect = Integer.parseInt(zsonobject_collect.getString("sum")); DataCenterControl.usercollect_listcontainer_list.clear(); for(int i = 0;i < sum_collect;i++){ ZSONObject t = ZSONObject.stringToZSON(zsonobject_collect.getString(String.valueOf(i))); String field = t.getString("TYPE"); int detail_len = t.getString("DETAIL").length(); if(field.equals("动态") || field.equals("文章")){ DataCenterControl.usercollect_listcontainer_list.add(new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL").substring(12,detail_len - 1 - 1).replace("\\n","\n") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1]) ); } if(field.equals("项目")){ DataCenterControl.usercollect_listcontainer_list.add(new LCArryListContentItem(t.getString("CONTENT_ID") ,t.getString("TYPE") ,t.getString("DATE") ,t.getString("READVALUE") ,t.getString("DETAIL") ,t.getString("USER_ID") ,DataCenterControl.fields[Integer.parseInt(t.getString("FIELD_ID")) - 1]) ); } } if(DataCenterControl.userCollectListContainerProvider != null){ DataCenterControl.userCollectListContainerProvider.notifyDataChanged(); } MyTools.toastShow("用户收藏下载成功!", slice.getContext()); break; default: MyTools.toastShow("用户未知下载成功!", slice.getContext()); break; }} }); } else if(result.equals("NULL")){ slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { switch(type){ case "dtlist": DataCenterControl.userdt_listcontainer_list.clear(); if(DataCenterControl.userDtListContainerProvider != null){ DataCenterControl.userDtListContainerProvider.notifyDataChanged(); } break; case "xmlist": DataCenterControl.userxm_listcontainer_list.clear(); if(DataCenterControl.userXmListContainerProvider != null){ DataCenterControl.userXmListContainerProvider.notifyDataChanged(); } break; case "wzlist": DataCenterControl.userwz_listcontainer_list.clear(); if(DataCenterControl.userWzListContainerProvider != null){ DataCenterControl.userWzListContainerProvider.notifyDataChanged(); } break; case "collectlist": DataCenterControl.usercollect_listcontainer_list.clear(); if(DataCenterControl.userCollectListContainerProvider != null){ DataCenterControl.userCollectListContainerProvider.notifyDataChanged(); } break; } MyTools.toastShow("用户内容为空!", slice.getContext());} }); } else{ slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { switch (type) { case "dtlist": MyTools.toastShow("用户动态下载失败!", slice.getContext()); break; case "xmlist": MyTools.toastShow("用户项目下载失败!", slice.getContext()); break; case "wzlist": MyTools.toastShow("用户文章下载失败!", slice.getContext()); break; case "collectlist": MyTools.toastShow("用户收藏下载失败!", slice.getContext()); break; default: MyTools.toastShow("用户未知下载失败!", slice.getContext()); break; }} }); } } } catch (IOException e) {} finally { if (httpURLConnection != null) { httpURLConnection.disconnect(); } } }); } /http请求用户内容列表与收藏列表数据区域*>*/ /*<http删除用户内容数据区域*/ public static void UpDataDeleteUserContentInfo(AbilitySlice slice,String type, String contentid, ArrayList<LCArryListContentItem> list, LCProviderForContent lcProviderForContent, int list_i){ NetManager main_toplistnetmanger = NetManager.getInstance(slice.getContext()); if (!main_toplistnetmanger.hasDefaultNet()) {return;} ThreadPoolUtil.submit(() -> { NetHandle thenetHandle = main_toplistnetmanger.getDefaultNet(); NetStatusCallback netStatusCallback = new NetStatusCallback() {}; HttpURLConnection httpURLConnection = null; String urlString = DataCenterControl.serverIpWithPort + "deleteusercontent/?"; try { URL url = new URL(urlString); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); URLConnection urlConnection = thenetHandle.openConnection(url, java.net.Proxy.NO_PROXY); if (urlConnection instanceof HttpURLConnection) { httpURLConnection = (HttpURLConnection) urlConnection; httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("username="); stringBuilder.append(DataCenterControl.userName); stringBuilder.append("&contentid="); stringBuilder.append(contentid); byte[] b = stringBuilder.toString().getBytes(); httpURLConnection.getOutputStream().write(b); try { httpURLConnection.connect(); } catch (IOException e) {} outputStream.flush(); InputStream inputStream = null; try { inputStream = urlConnection.getInputStream(); byte[] cache = new byte[2 * 1024]; int len = inputStream.read(cache); while (len != -1) {outputStream.write(cache, 0, len);len = inputStream.read(cache); } } catch (IOException e) {} String result = ""; result = outputStream.toString(); if(result.equals("OK")){ slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { list.remove(list_i); lcProviderForContent.notifyDataChanged(); MyTools.toastShow("删除成功!", slice.getContext());} }); } else if(result.equals("NO")){ slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { MyTools.toastShow("删除失败!刷可刷新加载!", slice.getContext());} }); } } } catch (IOException e) {} finally { if (httpURLConnection != null) { httpURLConnection.disconnect(); } } }); } /http删除用户内容数据区域*>*/ /*<http发送点击阅读指令区域*/ public static void UpDataWorldListReadInfo(AbilitySlice slice,String content_id,String user_id,Button detail_authorbut,Button detail_topddl_agreebut,Button detail_topddl_collectbut){ NetManager main_toplistnetmanger = NetManager.getInstance(slice.getContext()); if (!main_toplistnetmanger.hasDefaultNet()) {return;} ThreadPoolUtil.submit(() -> { NetHandle thenetHandle = main_toplistnetmanger.getDefaultNet(); NetStatusCallback netStatusCallback = new NetStatusCallback() {}; HttpURLConnection httpURLConnection = null; String urlString = DataCenterControl.serverIpWithPort + "read/?"; try { URL url = new URL(urlString); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); URLConnection urlConnection = thenetHandle.openConnection(url, java.net.Proxy.NO_PROXY); if (urlConnection instanceof HttpURLConnection) { httpURLConnection = (HttpURLConnection) urlConnection; httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("username="); stringBuilder.append(DataCenterControl.userName); stringBuilder.append("&content_id="); stringBuilder.append(content_id); stringBuilder.append("&user_id="); stringBuilder.append(user_id); byte[] b = stringBuilder.toString().getBytes(); httpURLConnection.getOutputStream().write(b); try { httpURLConnection.connect(); } catch (IOException e) {} outputStream.flush(); InputStream inputStream = null; try { inputStream = urlConnection.getInputStream(); byte[] cache = new byte[2 * 1024]; int len = inputStream.read(cache); while (len != -1) {outputStream.write(cache, 0, len);len = inputStream.read(cache); } } catch (IOException e) {} String result = ""; result = outputStream.toString(); String[] tosettext = {"","",""}; if(result.startsWith("ok:")){ result = result.substring(3); if(result.charAt(0) == '0'){tosettext[0] = "关注"; } else{tosettext[0] = "已关注"; } if(result.charAt(1) == '0'){tosettext[1] = "点赞"; } else{tosettext[1] = "已点赞"; } if(result.charAt(2) == '0'){tosettext[2] = "收藏"; } else{tosettext[2] = "已收藏"; } slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { detail_authorbut.setText(tosettext[0]); detail_topddl_agreebut.setText(tosettext[1]); detail_topddl_collectbut.setText(tosettext[2]);} }); } } } catch (IOException e) {} finally { if (httpURLConnection != null) { httpURLConnection.disconnect(); } } }); } /http发送点击阅读指令区域*>*/ /*<http请求内容评论数据区域*/ public static void DownDataContentDiscussListInfo(AbilitySlice slice, String contentid){ NetManager main_toplistnetmanger = NetManager.getInstance(slice.getContext()); if (!main_toplistnetmanger.hasDefaultNet()) {return;} ThreadPoolUtil.submit(() -> { NetHandle thenetHandle = main_toplistnetmanger.getDefaultNet(); NetStatusCallback netStatusCallback = new NetStatusCallback() {}; HttpURLConnection httpURLConnection = null; String urlString = DataCenterControl.serverIpWithPort + "pulldiscuss/?"; try { URL url = new URL(urlString); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); URLConnection urlConnection = thenetHandle.openConnection(url, java.net.Proxy.NO_PROXY); if (urlConnection instanceof HttpURLConnection) { httpURLConnection = (HttpURLConnection) urlConnection; httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("contentid="); stringBuilder.append(contentid); byte[] b = stringBuilder.toString().getBytes(); httpURLConnection.getOutputStream().write(b); try { httpURLConnection.connect(); } catch (IOException e) {} outputStream.flush(); InputStream inputStream = null; try { inputStream = urlConnection.getInputStream(); byte[] cache = new byte[2 * 1024]; int len = inputStream.read(cache); while (len != -1) {outputStream.write(cache, 0, len);len = inputStream.read(cache); } } catch (IOException e) {} String result = ""; result = outputStream.toString(); if(result.indexOf("sum") != -1){ String finalResult = result; ZSONObject zsonobject_dt = ZSONObject.stringToZSON(finalResult); int sum_dt = Integer.parseInt(zsonobject_dt.getString("sum")); DataCenterControl.discuss_listcontainer_list.clear(); for(int i = 0;i < sum_dt;i++){ZSONObject t = ZSONObject.stringToZSON(zsonobject_dt.getString(String.valueOf(i)));DataCenterControl.discuss_listcontainer_list.add(new LCArryListNormalItem(t.getString("detail"))); } slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { if(DataCenterControl.discussListContainerProvider != null){ DataCenterControl.discussListContainerProvider.notifyDataChanged(); } MyTools.toastShow("内容评论下载成功!", slice.getContext());} }); } else if(result.equals("NULL")){ slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { DataCenterControl.discuss_listcontainer_list.clear(); if(DataCenterControl.discussListContainerProvider != null){ DataCenterControl.discussListContainerProvider.notifyDataChanged(); } MyTools.toastShow("评论为空!", slice.getContext());} }); } else{ slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { MyTools.toastShow("该内容评论下载失败!", slice.getContext());} }); } } } catch (IOException e) {} finally { if (httpURLConnection != null) { httpURLConnection.disconnect(); } } }); } /http请求内容评论数据区域*>*/ /*<http发布评论数据区域*/ public static void UpDataContentDiscussInfo(AbilitySlice slice,String contentid,String detail,TextField discuss_writetfd){ NetManager main_toplistnetmanger = NetManager.getInstance(slice.getContext()); if (!main_toplistnetmanger.hasDefaultNet()) {return;} ThreadPoolUtil.submit(() -> { NetHandle thenetHandle = main_toplistnetmanger.getDefaultNet(); NetStatusCallback netStatusCallback = new NetStatusCallback() {}; HttpURLConnection httpURLConnection = null; String urlString = DataCenterControl.serverIpWithPort + "pushdiscuss/?"; try { URL url = new URL(urlString); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); URLConnection urlConnection = thenetHandle.openConnection(url, java.net.Proxy.NO_PROXY); if (urlConnection instanceof HttpURLConnection) { httpURLConnection = (HttpURLConnection) urlConnection; httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("username="); stringBuilder.append(DataCenterControl.userName); stringBuilder.append("&contentid="); stringBuilder.append(contentid); stringBuilder.append("&detail="); stringBuilder.append(detail); stringBuilder.append("&time="); SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(System.currentTimeMillis()); stringBuilder.append(formatter.format(date)); byte[] b = stringBuilder.toString().getBytes(); httpURLConnection.getOutputStream().write(b); try { httpURLConnection.connect(); } catch (IOException e) {} outputStream.flush(); InputStream inputStream = null; try { inputStream = urlConnection.getInputStream(); byte[] cache = new byte[2 * 1024]; int len = inputStream.read(cache); while (len != -1) {outputStream.write(cache, 0, len);len = inputStream.read(cache); } } catch (IOException e) {} String result = ""; result = outputStream.toString(); if(result.equals("OK")){ slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { discuss_writetfd.clearFocus(); discuss_writetfd.setText(""); MyTools.toastShow("评论成功!", slice.getContext());} }); } else if(result.equals("NO")){ slice.getUITaskDispatcher().asyncDispatch(new Runnable() {@Overridepublic void run() { MyTools.toastShow("评论失败!!", slice.getContext());} }); } } } catch (IOException e) {} finally { if (httpURLConnection != null) { httpURLConnection.disconnect(); } } }); } /http发布评论数据区域*>*/ /*<http发送点赞或收藏指令区域*/ public static void UpDataAgreeAndCollectInfo(AbilitySlice slice,String content_id,String operation,Button button){ NetManager main_toplistnetmanger = NetManager.getInstance(slice.getContext()); if (!main_toplistnetmanger.hasDefaultNet()) {return;} ThreadPoolUtil.submit(() -> { NetHandle thenetHandle = main_toplistnetmanger.getDefaultNet(); NetStatusCallback netStatusCallback = new NetStatusCallback() {}; HttpURLConnection httpURLConnection = null; String urlString = ""; if(operation.equals("点赞")){ urlString = DataCenterControl.serverIpWithPort + "agree/?"; } if(operation.equals("收藏")){ urlString = DataCenterControl.serverIpWithPort + "collect/?"; } if(operation.equals("取消点赞")){ urlString = DataCenterControl.serverIpWithPort + "unagree/?"; } if(operation.equals("取消收藏")){ urlString = DataCenterControl.serverIpWithPort + "uncollect/?"; } try { URL url = new URL(urlString); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); URLConnection urlConnection = thenetHandle.openConnection(url, java.net.Proxy.NO_PROXY); if (urlConnection instanceof HttpURLConnection) { httpURLConnection = (HttpURLConnection) urlConnection; httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("username="); stringBuilder.append(DataCenterControl.userName); stringBuilder.append("&contentid="); stringBuilder.append(content_id); stringBuilder.append("&time="); SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(System.currentTimeMillis()); stringBuilder.append(formatter.format(date)); byte[] b = stringBuilder.toString().getBytes(); httpURLConnection.getOutputStream().write(b); try { httpURLConnection.connect(); } catch (IOException e) {} outputStream.flush(); InputStream inputStream = null; try { inputStream = urlConnection.getInputStream(); byte[] cache = new byte[2 * 1024]; int len = inputStream.read(cache); while (len != -1) {outputStream.write(cache, 0, len);len = inputStream.read(cache); } } catch (IOException e) {} String result = ""; result = outputStream.toString(); String[] tosettext = {"","",""}; if(result.equals("OK")){ if(operation.equals("点赞")){slice.getUITaskDispatcher().asyncDispatch(new Runnable() { @Override public void run() { button.setText("已点赞"); }}); } if(operation.equals("收藏")){slice.getUITaskDispatcher().asyncDispatch(new Runnable() { @Override public void run() { button.setText("已收藏"); }}); } if(operation.equals("取消点赞")){slice.getUITaskDispatcher().asyncDispatch(new Runnable() { @Override public void run() { button.setText("点赞"); }}); } if(operation.equals("取消收藏")){slice.getUITaskDispatcher().asyncDispatch(new Runnable() { @Override public void run() { button.setText("收藏"); }}); } } } } catch (IOException e) {} finally { if (httpURLConnection != null) { httpURLConnection.disconnect(); } } }); } /http发送点赞或收藏指令区域*>*/ public static void toastShow(String info, Context context){ ToastDialog toastDialog = new ToastDialog(context); toastDialog.setText(info); toastDialog.setTransparent(true); toastDialog.setDuration(50); toastDialog.setAlignment(LayoutAlignment.CENTER); toastDialog.show(); } public static void commonDialogRemoveShow(String title, String content, Component component,int itemid, AbilitySlice slice,String operation){ CommonDialog commonDialog = new CommonDialog(slice.getContext()); commonDialog.setTitleText(title); commonDialog.setContentText(content); commonDialog.setSize(630,400); commonDialog.setButton(1, "确认", new IDialog.ClickedListener() { @Override public void onClick(IDialog iDialog, int i) { if(operation.equals("destory")){ MyTools.UpDataDestoryInfo(slice,DataCenterControl.userName); } if(operation.equals("follow")){ Text text = (Text) ((DirectionalLayout)component).getComponentAt(0); String s = text.getText(); if(s.substring(0,s.length() - 4).equals(DataCenterControl.userName)){ MyTools.toastShow("无法关注自己!",slice.getContext()); commonDialog.destroy(); return; } MyTools.UpDataFollowInfo(slice,component,s.substring(0,s.length() - 4),itemid,"关注"); } if(operation.equals("unfollow")){ Text text = (Text) ((DirectionalLayout)component).getComponentAt(0); String s = text.getText(); MyTools.UpDataFollowInfo(slice,component,s.substring(0,s.length() - 5),itemid,"取消关注"); } commonDialog.destroy(); } }); commonDialog.setButton(2, "取消", new IDialog.ClickedListener() { @Override public void onClick(IDialog iDialog, int i) { commonDialog.destroy(); } }); commonDialog.show(); } public static void selectImage(AbilitySlice abilitySlice, int requestCode){ Intent intent = new Intent(); Operation operation = new Intent.OperationBuilder() .withAction("android.intent.action.GET_CONTENT") .withFlags(Intent.FLAG_NOT_OHOS_COMPONENT) .build(); intent.setOperation(operation); intent.setType("image/*"); abilitySlice.startAbilityForResult(intent,requestCode); }}
5. 服务器端python源代码
5.1 createDataBaseAndTables.py
import pymysql#编写创建各表的SQL语句#1.创建USERS表USERS = ''' CREATE TABLE IF NOT EXISTS USERS ( USER_ID VARCHAR(32) NOT NULL, PASSWORD CHAR(8) NOT NULL, EMAIL VARCHAR(100) NOT NULL, AGE TINYINT NOT NULL, GENDER ENUM('男','女') NOT NULL DEFAULT '男', PRIMARY KEY(USER_ID) ) '''#2.创建FIELD表FIELD = ''' CREATE TABLE IF NOT EXISTS FIELD ( FIELD_ID VARCHAR(1) NOT NULL, NAME ENUM('艺','衣','食','住','行','学','文') NOT NULL DEFAULT '艺', PRIMARY KEY(FIELD_ID) ) '''#3.创建USER_CONTENTS表USER_CONTENTS = ''' CREATE TABLE IF NOT EXISTS USER_CONTENTS ( CONTENT_ID INT NOT NULL AUTO_INCREMENT, TYPE ENUM('动态','项目','文章') NOT NULL, DATE DATETIME NOT NULL, READVALUE INT NOT NULL, DETAIL JSON NOT NULL, USER_ID VARCHAR(32) NOT NULL, FIELD_ID VARCHAR(1) NOT NULL, PRIMARY KEY(CONTENT_ID), FOREIGN KEY(USER_ID) REFERENCES USERS(USER_ID) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY(FIELD_ID) REFERENCES FIELD(FIELD_ID) ON DELETE CASCADE ON UPDATE CASCADE ) '''#4.创建AGREE表AGREE = ''' CREATE TABLE IF NOT EXISTS AGREE ( AGREE_ID INT NOT NULL AUTO_INCREMENT, TIME DATETIME NOT NULL, CONTENT_ID INT NOT NULL, USER_ID VARCHAR(32) NOT NULL, PRIMARY KEY(AGREE_ID), FOREIGN KEY(CONTENT_ID) REFERENCES USER_CONTENTS(CONTENT_ID) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY(USER_ID) REFERENCES USERS(USER_ID) ON DELETE CASCADE ON UPDATE CASCADE ) '''#5.创建DISCUSS表DISCUSS = ''' CREATE TABLE IF NOT EXISTS DISCUSS ( DISCUSS_ID INT NOT NULL AUTO_INCREMENT, TIME DATETIME NOT NULL, DETAIL VARCHAR(300) NOT NULL, CONTENT_ID INT NOT NULL, USER_ID VARCHAR(32) NOT NULL, PRIMARY KEY(DISCUSS_ID), FOREIGN KEY(CONTENT_ID) REFERENCES USER_CONTENTS(CONTENT_ID) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY(USER_ID) REFERENCES USERS(USER_ID) ON DELETE CASCADE ON UPDATE CASCADE ) '''#6.创建COLLECT表COLLECT = ''' CREATE TABLE IF NOT EXISTS COLLECT ( COLLECT_ID INT NOT NULL AUTO_INCREMENT, TIME DATETIME NOT NULL, CONTENT_ID INT NOT NULL, USER_ID VARCHAR(32) NOT NULL, PRIMARY KEY(COLLECT_ID), FOREIGN KEY(CONTENT_ID) REFERENCES USER_CONTENTS(CONTENT_ID) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY(USER_ID) REFERENCES USERS(USER_ID) ON DELETE CASCADE ON UPDATE CASCADE ) '''#a.打开数据库连接database = pymysql.connect(host='localhost' ,user='root' ,password='000000' ,port=3306)print("已经连接到Mysql!")#b.使用cursor()方法创建一个游标对象curcur = database.cursor()cur.execute('CREATE DATABASE IF NOT EXISTS WHXD')cur.close()print("已经创建WHXD数据库,并关闭连接!")#a.打开数据库连接database = pymysql.connect(host='localhost' ,user='root' ,password='000000' ,port=3306 ,database='WHXD')print("已经连接到WHXD数据库!")#b.使用cursor()方法创建一个游标对象curcur = database.cursor()#c.使用execute()方法执行SQL语句cur.execute(USERS)cur.execute(FIELD)cur.execute(USER_CONTENTS)cur.execute(AGREE)cur.execute(DISCUSS)cur.execute(COLLECT)sql = ''' INSERT INTO FIELD (FIELD_ID,NAME) VALUES ('1','艺') '''cur.execute(sql)database.commit()sql = ''' INSERT INTO FIELD (FIELD_ID,NAME) VALUES ('2','衣') '''cur.execute(sql)database.commit()sql = ''' INSERT INTO FIELD (FIELD_ID,NAME) VALUES ('3','食') '''cur.execute(sql)database.commit()sql = ''' INSERT INTO FIELD (FIELD_ID,NAME) VALUES ('4','住') '''cur.execute(sql)database.commit()sql = ''' INSERT INTO FIELD (FIELD_ID,NAME) VALUES ('5','行') '''cur.execute(sql)database.commit()sql = ''' INSERT INTO FIELD (FIELD_ID,NAME) VALUES ('6','学') '''cur.execute(sql)database.commit()sql = ''' INSERT INTO FIELD (FIELD_ID,NAME) VALUES ('7','文') '''cur.execute(sql)database.commit()#d.关闭数据库连接database.close()print("已经创建各表并插入领域数据,并关闭WHXD数据库连接!")
5.2 views.py
from django.shortcuts import renderfrom django.http import HttpResponsefrom django.views.decorators.csrf import csrf_exemptimport jsonimport pymysql# Create your views here.# request第一个参数必不可少,将浏览器请求的对象传过来@csrf_exemptdef register(request): USERNAME = '' PASSORD = '' EMAIL = '' AGE = '' GENDER = '' canregister = True # 1.注册指令处理 if request.method == 'POST': print("注册信息:") print("username:", request.POST.get('username')) print("password:", request.POST.get('password')) print("email:", request.POST.get('email')) print("gender:", request.POST.get('gender')) print("age:", request.POST.get('age')) USERNAME = request.POST.get('username') PASSORD = request.POST.get('password') EMAIL = request.POST.get('email') AGE = request.POST.get('age') GENDER = request.POST.get('gender') elif request.method == 'GET': print("注册信息:") print("username:", request.GET.get('username')) print("password:", request.GET.get('password')) print("email:", request.GET.get('email')) print("gender:", request.GET.get('gender')) print("age:", request.GET.get('age')) USERNAME = request.GET.get('username') PASSORD = request.GET.get('password') EMAIL = request.GET.get('email') AGE = request.GET.get('age') GENDER = request.GET.get('gender') # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[注册]已经连接到WHXD数据库!") sql = "SELECT USER_ID FROM USERS WHERE USER_ID='%s'" % USERNAME # 查询该用户名是否存在 print(sql) # c.使用execute()方法执行SQL语句 cur.execute(sql) result = cur.fetchall() if len(result) == 0: # 该用户名不存在——可以注册 sql = "INSERT INTO USERS VALUES('%s','%s','%s',%s,'%s')" % (USERNAME, PASSORD, EMAIL, AGE, GENDER) print(sql) cur.execute(sql) database.commit() # 给该新注册用户创建一个关注表 sql = '''CREATE TABLE IF NOT EXISTS %s_FOLLOW( ID INT NOT NULL AUTO_INCREMENT,FOLLOW_ID VARCHAR(32) NOT NULL, PRIMARY KEY(ID), FOREIGN KEY(FOLLOW_ID) REFERENCES USERS(USER_ID) ON DELETE CASCADE ON UPDATE CASCADE)''' % (USERNAME.upper()) print(sql) cur.execute(sql) # 给该新注册用户创建一个粉丝表 sql = '''CREATE TABLE IF NOT EXISTS %s_FANS( ID INT NOT NULL AUTO_INCREMENT,FANS_ID VARCHAR(32) NOT NULL, PRIMARY KEY(ID), FOREIGN KEY(FANS_ID) REFERENCES USERS(USER_ID) ON DELETE CASCADE ON UPDATE CASCADE)''' % (USERNAME.upper()) print(sql) cur.execute(sql) print("已经成功注册该用户!") else: # 该用户名存在——不能注册 print("该账户已经存在!") canregister = False # d.关闭数据库连接 database.close() print("[注册]已经关闭WHXD数据库连接!") if canregister == True: return HttpResponse("OK") else: return HttpResponse("NO")# --------------------------已完成-分割线----------------------#@csrf_exemptdef login(request): USERNAME = '' PASSORD = '' # 2.登录指令处理 if request.method == 'POST': print("登陆信息:") print("username:", request.POST.get('username')) print("password:", request.POST.get('password')) USERNAME = request.POST.get('username') PASSORD = request.POST.get('password') elif request.method == 'GET': print("登陆信息:") print("username:", request.GET.get('username')) print("password:", request.GET.get('password')) USERNAME = request.GET.get('username') PASSORD = request.GET.get('password') # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[登录]已经连接到WHXD数据库!") sql = "SELECT USER_ID,PASSWORD,EMAIL,GENDER,AGE FROM USERS WHERE USER_ID='%s'" % USERNAME # 查询该用户名是否存在 print(sql) # c.使用execute()方法执行SQL语句 cur.execute(sql) result = cur.fetchall() # d.关闭数据库连接 database.close() print("[登录]已经关闭WHXD数据库连接!") if len(result) == 0: print("账户不存在,请注册!") return HttpResponse("NOT") else: if PASSORD == result[0][1]: print("密码正确,登录成功!") backinfo = 'OK' \ + ',' + str(result[0][0]) \ + ',' + str(result[0][1]) \ + ',' + str(result[0][2]) \ + ',' + str(result[0][4]) \ + ',' + str(result[0][3]) return HttpResponse(backinfo) else: print("密码错误,登录失败!") return HttpResponse("NO")# --------------------------已完成-分割线----------------------#@csrf_exemptdef destory(request): USERNAME = '' # 3.销毁指令处理 if request.method == 'POST': print("被销毁账号:") print("username:", request.POST.get('username')) USERNAME = request.POST.get('username') elif request.method == 'GET': print("被销毁账号:") print("username:", request.GET.get('username')) USERNAME = request.GET.get('username') # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[销毁]已经连接到WHXD数据库!") sql = ''' DELETE FROM USERS WHERE USER_ID='%s' '''%USERNAME print(sql) # c.使用execute()方法执行SQL语句 cur.execute(sql) database.commit() print("1.已经删除该用户信息!") ''' # 将关注列表中所有用户的粉丝列表中删除自己, sql = " SELECT FOLLOW_ID FROM %s_FOLLOW " % USERNAME cur.execute(sql) result = cur.fetchall() result_len = len(result) if result_len != 0: for i in range(0, result_len): tsql = " DELETE FORM %s_FANS WHERE FANS_ID='%s' " % (request[i][0], USERNAME) print(tsql) cur.execute(tsql) database.commit() print("2.已取消所有的关注!") ''' sql = '''DROP TABLE IF EXISTS %s_FOLLOW''' % USERNAME cur.execute(sql) sql = '''DROP TABLE IF EXISTS %s_FANS''' % USERNAME cur.execute(sql) print("3.已经删除该用户关注和粉丝表!") # d.关闭数据库连接 database.close() print("[销毁]已经关闭WHXD数据库连接!") return HttpResponse("OK")# --------------------------已完成-分割线----------------------#@csrf_exemptdef read(request): USERNAME = '' CONTENT_ID = '' USER_ID = '' isfollow = '0' isagree = '0' iscollect = '0' # 阅读详情指令 if request.method == 'POST': print("[指令]阅读详情") USERNAME = request.POST.get('username') CONTENT_ID = int(request.POST.get('content_id')) USER_ID = request.POST.get('user_id') elif request.method == 'GET': print("[指令]阅读详情") USERNAME = request.GET.get('username') CONTENT_ID = int(request.GET.get('content_id')) USER_ID = request.GET.get('user_id') # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[阅读指令]已经连接到WHXD数据库!") sql = ''' SELECT READVALUE FROM USER_CONTENTS WHERE CONTENT_ID=%s ''' % CONTENT_ID cur.execute(sql) count = cur.fetchall() count = count[0][0] + 1 sql = ''' UPDATE USER_CONTENTS SET READVALUE=%s WHERE CONTENT_ID=%s ''' % (count, CONTENT_ID) cur.execute(sql) database.commit() # 查询USERBANE是否关注了USER_ID sql = '''SELECT FOLLOW_ID FROM %s_FOLLOW WHERE FOLLOW_ID='%s' ''' % (USERNAME, USER_ID) print(sql) cur.execute(sql) result = cur.fetchall() print(result) if len(result) == 0: isfollow = '0' else: isfollow = '1' # 查询USERNAME是否点赞了CONTENT_ID sql = '''SELECT CONTENT_ID,USER_ID FROM AGREE WHERE CONTENT_ID=%s AND USER_ID='%s' ''' % (CONTENT_ID, USERNAME) print(sql) cur.execute(sql) result = cur.fetchall() if len(result) == 0: isagree = '0' else: isagree = '1' # 查询USERNAME是否收藏了CONTENT_ID sql = '''SELECT CONTENT_ID,USER_ID FROM COLLECT WHERE CONTENT_ID=%s AND USER_ID='%s' ''' % (CONTENT_ID, USERNAME) print(sql) cur.execute(sql) result = cur.fetchall() if len(result) == 0: iscollect = '0' else: iscollect = '1' # 查询 # d.关闭数据库连接 database.close() print("[阅读指令]已经关闭WHXD数据库连接!") return HttpResponse('ok:' + isfollow + isagree + iscollect)# --------------------------已完成-分割线----------------------#@csrf_exemptdef worlddt(request): # 4.全站动态列表请求指令处理 if request.method == 'POST': print("[指令]全站动态列表") elif request.method == 'GET': print("[指令]全站动态列表") # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[请求全站动态列表]已经连接到WHXD数据库!") sql = ''' SELECT CONTENT_ID,TYPE,DATE,READVALUE,DETAIL,USER_ID,FIELD_ID FROM USER_CONTENTS WHERE TYPE='动态' ORDER BY DATE DESC ''' cur.execute(sql) result = cur.fetchall() # d.关闭数据库连接 database.close() print("[请求全站动态列表]已经关闭WHXD数据库连接!") result_len = len(result) if result_len == 0: print("全站动态列表查询为空!") return HttpResponse("NULL") else: backjson = {} table_fiels = ['CONTENT_ID', 'TYPE', 'DATE', 'READVALUE', 'DETAIL', 'USER_ID', 'FIELD_ID'] backjson['sum'] = result_len for i in range(0, result_len): record = {} for j in range(0, len(result[i])): if j == 2: record[table_fiels[j]] = result[i][j].strftime('%Y-%m-%d %H:%M:%S') else: record[table_fiels[j]] = result[i][j] backjson[str(i)] = record print("backjson is:", backjson) return HttpResponse(json.dumps(backjson, ensure_ascii=False))# --------------------------已完成-分割线----------------------#@csrf_exemptdef worldxm(request): # 5.全站项目列表指令处理 if request.method == 'POST': print("[指令]全站项目列表") elif request.method == 'GET': print("[指令]全站项目列表") # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[请求全站项目列表]已经连接到WHXD数据库!") sql = ''' SELECT CONTENT_ID,TYPE,DATE,READVALUE,DETAIL,USER_ID,FIELD_ID FROM USER_CONTENTS WHERE TYPE='项目' ORDER BY DATE DESC ''' cur.execute(sql) result = cur.fetchall() # d.关闭数据库连接 database.close() print("[请求全站项目列表]已经关闭WHXD数据库连接!") result_len = len(result) if result_len == 0: print("全站项目列表查询为空!") return HttpResponse("NULL") else: backjson = {} table_fiels = ['CONTENT_ID', 'TYPE', 'DATE', 'READVALUE', 'DETAIL', 'USER_ID', 'FIELD_ID'] backjson['sum'] = result_len for i in range(0, result_len): record = {} for j in range(0, len(result[i])): if j == 2: record[table_fiels[j]] = result[i][j].strftime('%Y-%m-%d %H:%M:%S') else: record[table_fiels[j]] = result[i][j] backjson[str(i)] = record print("backjson is:", backjson) return HttpResponse(json.dumps(backjson, ensure_ascii=False))# --------------------------已完成-分割线----------------------#@csrf_exemptdef worldwz(request): # 6.全站文章列表指令处理 if request.method == 'POST': print("[指令]全站文章列表") elif request.method == 'GET': print("[指令]全站文章列表") # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[请求全站文章列表]已经连接到WHXD数据库!") sql = ''' SELECT CONTENT_ID,TYPE,DATE,READVALUE,DETAIL,USER_ID,FIELD_ID FROM USER_CONTENTS WHERE TYPE='文章' ORDER BY DATE DESC ''' cur.execute(sql) result = cur.fetchall() # d.关闭数据库连接 database.close() print("[请求全站文章列表]已经关闭WHXD数据库连接!") result_len = len(result) if result_len == 0: print("全站文章列表查询为空!") return HttpResponse("NULL") else: backjson = {} table_fiels = ['CONTENT_ID', 'TYPE', 'DATE', 'READVALUE', 'DETAIL', 'USER_ID', 'FIELD_ID'] backjson['sum'] = result_len for i in range(0, result_len): record = {} for j in range(0, len(result[i])): if j == 2: record[table_fiels[j]] = result[i][j].strftime('%Y-%m-%d %H:%M:%S') else: record[table_fiels[j]] = result[i][j] backjson[str(i)] = record print("backjson is:", backjson) return HttpResponse(json.dumps(backjson, ensure_ascii=False))# --------------------------已完成-分割线----------------------#@csrf_exemptdef worldfield(request): FIELD_ID = '' # 请求领域数据 if request.method == 'POST': print("[指令]领域列表") FIELD_ID = request.POST.get('field_id') elif request.method == 'GET': print("[指令]领域列表") FIELD_ID = request.GET.get('field_id') # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[请求领域列表]已经连接到WHXD数据库!") sql = ''' SELECT CONTENT_ID,TYPE,DATE,READVALUE,DETAIL,USER_ID,FIELD_ID FROM USER_CONTENTS WHERE FIELD_ID=%s ORDER BY DATE DESC ''' % FIELD_ID cur.execute(sql) result = cur.fetchall() # d.关闭数据库连接 database.close() print("[请求领域列表]已经关闭WHXD数据库连接!") result_len = len(result) if result_len == 0: print("领域列表查询为空!") return HttpResponse("NULL") else: backjson = {} table_fiels = ['CONTENT_ID', 'TYPE', 'DATE', 'READVALUE', 'DETAIL', 'USER_ID', 'FIELD_ID'] backjson['sum'] = result_len for i in range(0, result_len): record = {} for j in range(0, len(result[i])): if j == 2: record[table_fiels[j]] = result[i][j].strftime('%Y-%m-%d %H:%M:%S') else: record[table_fiels[j]] = result[i][j] backjson[str(i)] = record print("backjson is:", backjson) return HttpResponse(json.dumps(backjson, ensure_ascii=False))# --------------------------已完成-分割线----------------------#@csrf_exemptdef follow(request): # 14.某用户关注他人指令处理 USERNAME = '' USER_ID = '' if request.method == 'POST': print("[指令]某用户关注他人") print("username:", request.POST.get('username')) print("USER_ID:", request.POST.get('user_id')) USERNAME = request.POST.get('username') USER_ID = request.POST.get('user_id') elif request.method == 'GET': print("[指令]某用户关注他人") print("username:", request.GET.get('username')) print("USER_ID:", request.GET.get('user_id')) USERNAME = request.GET.get('username') USER_ID = request.GET.get('user_id') # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[关注他人]已经连接到WHXD数据库!") # 向该用户的关注表中写入数据 sql = ''' INSERT INTO %s_FOLLOW (FOLLOW_ID) VALUE('%s') ''' % (USERNAME, USER_ID) cur.execute(sql) database.commit() # 向被关注人的粉丝表中写入数据 sql = ''' INSERT INTO %s_FANS (FANS_ID) VALUE('%s') ''' % (USER_ID, USERNAME) cur.execute(sql) database.commit() # d.关闭数据库连接 database.close() print("[关注他人]已经关闭WHXD数据库连接!") return HttpResponse("OK")# --------------------------已完成-分割线----------------------#@csrf_exemptdef unfollow(request): # 15.某用户取消关注他人指令处理 USERNAME = '' USER_ID = '' if request.method == 'POST': print("[指令]某用户取消关注他人") print("username:", request.POST.get('username')) print("USER_ID:", request.POST.get('user_id')) USERNAME = request.POST.get('username') USER_ID = request.POST.get('user_id') elif request.method == 'GET': print("[指令]某用户取消关注他人") print("username:", request.GET.get('username')) print("USER_ID:", request.GET.get('user_id')) USERNAME = request.GET.get('username') USER_ID = request.GET.get('user_id') # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[取消关注他人]已经连接到WHXD数据库!") # 从该用户的关注表中删除数据 sql = ''' DELETE FROM %s_FOLLOW WHERE FOLLOW_ID='%s' ''' % (USERNAME, USER_ID) cur.execute(sql) database.commit() # 判断他人粉丝表是否存在 sql = ''' SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='%s_FANS' ''' % USER_ID cur.execute(sql) result = cur.fetchall() if len(result) != 0: # 从被关注人的粉丝表中删除数据 sql = '''DELETE FROM %s_FANS WHERE FANS_ID='%s'''' % (USER_ID, USERNAME) cur.execute(sql) database.commit() # d.关闭数据库连接 database.close() print("[取消关注他人]已经关闭WHXD数据库连接!") return HttpResponse("OK")# --------------------------已完成-分割线----------------------#@csrf_exemptdef collect(request): USERNAME = '' CONTENT_ID = '' TIME = '' # 16.某用户收藏内容指令处理 # 请求领域数据 if request.method == 'POST': print("[指令]某用户收藏内容") print("username:", request.POST.get('username')) print("contentid:", request.POST.get('contentid')) print("time:", request.POST.get('time')) USERNAME = request.POST.get('username') CONTENT_ID = request.POST.get('contentid') TIME = request.POST.get('time') elif request.method == 'GET': print("[指令]某用户收藏内容") print("username:", request.GET.get('username')) print("contentid:", request.GET.get('contentid')) print("time:", request.GET.get('time')) USERNAME = request.GET.get('username') CONTENT_ID = request.GET.get('contentid') TIME = request.GET.get('time') # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[收藏内容]已经连接到WHXD数据库!") sql = ''' INSERT INTO COLLECT (TIME,CONTENT_ID,USER_ID) VALUE('%s',%s,'%s') ''' % (TIME, CONTENT_ID, USERNAME) cur.execute(sql) database.commit() # d.关闭数据库连接 database.close() print("[收藏内容]已经关闭WHXD数据库连接!") return HttpResponse("OK")# --------------------------已完成-分割线----------------------#@csrf_exemptdef uncollect(request): USERNAME = '' CONTENT_ID = '' TIME = '' # 17.某用户取消收藏内容指令处理 # 请求领域数据 if request.method == 'POST': print("[指令]某用户取消收藏内容") print("username:", request.POST.get('username')) print("contentid:", request.POST.get('contentid')) print("time:", request.POST.get('time')) USERNAME = request.POST.get('username') CONTENT_ID = request.POST.get('contentid') TIME = request.POST.get('time') elif request.method == 'GET': print("[指令]某用户取消收藏内容") print("username:", request.GET.get('username')) print("contentid:", request.GET.get('contentid')) print("time:", request.GET.get('time')) USERNAME = request.GET.get('username') CONTENT_ID = request.GET.get('contentid') TIME = request.GET.get('time') # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[取消收藏内容]已经连接到WHXD数据库!") sql = ''' DELETE FROM COLLECT WHERE CONTENT_ID=%s AND USER_ID = '%s' ''' % (CONTENT_ID, USERNAME) cur.execute(sql) database.commit() # d.关闭数据库连接 database.close() print("[取消收藏内容]已经关闭WHXD数据库连接!") return HttpResponse("OK")# --------------------------已完成-分割线----------------------#@csrf_exemptdef agree(request): USERNAME = '' CONTENT_ID = '' TIME = '' # 20.某用户点赞内容指令处理 # 请求领域数据 if request.method == 'POST': print("[指令]某用户点赞内容") print("username:", request.POST.get('username')) print("contentid:", request.POST.get('contentid')) print("time:", request.POST.get('time')) USERNAME = request.POST.get('username') CONTENT_ID = request.POST.get('contentid') TIME = request.POST.get('time') elif request.method == 'GET': print("[指令]某用户点赞内容") print("username:", request.GET.get('username')) print("contentid:", request.GET.get('contentid')) print("time:", request.GET.get('time')) USERNAME = request.GET.get('username') CONTENT_ID = request.GET.get('contentid') TIME = request.GET.get('time') # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[点赞内容]已经连接到WHXD数据库!") sql = ''' INSERT INTO AGREE (TIME,CONTENT_ID,USER_ID) VALUE('%s',%s,'%s') ''' % (TIME, CONTENT_ID, USERNAME) cur.execute(sql) database.commit() # d.关闭数据库连接 database.close() print("[点赞内容]已经关闭WHXD数据库连接!") return HttpResponse("OK")# --------------------------已完成-分割线----------------------#@csrf_exemptdef unagree(request): USERNAME = '' CONTENT_ID = '' TIME = '' # 20.某用户点赞内容指令处理 # 请求领域数据 if request.method == 'POST': print("[指令]某用户取消点赞内容") print("username:", request.POST.get('username')) print("contentid:", request.POST.get('contentid')) print("time:", request.POST.get('time')) USERNAME = request.POST.get('username') CONTENT_ID = request.POST.get('contentid') TIME = request.POST.get('time') elif request.method == 'GET': print("[指令]某用户取消点赞内容") print("username:", request.GET.get('username')) print("contentid:", request.GET.get('contentid')) print("time:", request.GET.get('time')) USERNAME = request.GET.get('username') CONTENT_ID = request.GET.get('contentid') TIME = request.GET.get('time') # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[取消点赞内容]已经连接到WHXD数据库!") sql = ''' DELETE FROM AGREE WHERE CONTENT_ID=%s AND USER_ID = '%s' ''' % (CONTENT_ID, USERNAME) cur.execute(sql) database.commit() # d.关闭数据库连接 database.close() print("[取消点赞内容]已经关闭WHXD数据库连接!") return HttpResponse("OK")# --------------------------已完成-分割线----------------------#@csrf_exemptdef pushcontent(request): USERNAME = '' TYPE = '' FIELD_ID = '' DATE = '' DETAIL = '' TITLE = '' NODEONE = '' NODETWO = '' NODETHREE = '' # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[上传内容指令]已经连接到WHXD数据库!") # 22.某用户发布内容指令处理 if request.method == 'POST': type = request.POST.get('type') if type == '0': print("[指令]某用户发布[动态]内容") print("username:", request.POST.get('username')) print("type: 动态") print("field:", request.POST.get('field')) print("time:", request.POST.get('time')) print("detail:", request.POST.get('detail')) USERNAME = request.POST.get('username') TYPE = "动态" FIELD_ID = request.POST.get('field') DATE = request.POST.get('time') DETAIL = request.POST.get('detail') DETAIL = DETAIL.replace("\n", "\\\\n") print(DETAIL) DETAIL = '{"detail":"' + DETAIL + '"' + '}' print(DETAIL) elif type == '1': print("[指令]某用户发布[项目]内容") print("username:", request.POST.get('username')) print("type: 项目") print("field:", request.POST.get('field')) print("time:", request.POST.get('time')) print('title:', request.POST.get('title')) print('nodeone', request.POST.get('nodeone')) print('nodetwo', request.POST.get('nodetwo')) print('nodethree', request.POST.get('nodethree')) print("detail:", request.POST.get('detail')) USERNAME = request.POST.get('username') TYPE = "项目" FIELD_ID = request.POST.get('field') DATE = request.POST.get('time') DETAIL = request.POST.get('detail') TITLE = request.POST.get('title') NODEONE = request.POST.get('nodeone') NODETWO = request.POST.get('nodetwo') NODETHREE = request.POST.get('nodethree') DETAIL = DETAIL.replace("\n", "\\\\n") DETAIL = '{"title":"' + TITLE + '"' + \',"nodeone":"' + NODEONE + '"' + \',"nodetwo":"' + NODETWO + '"' + \',"nodethree":"' + NODETHREE + '"' + \',"detail":"' + DETAIL + '"' + \'}' print(DETAIL) elif type == '2': print("[指令]某用户发布[文章]内容") print("username:", request.POST.get('username')) print("type: 文章") print("field:", request.POST.get('field')) print("time:", request.POST.get('time')) print("detail:", request.POST.get('detail')) USERNAME = request.POST.get('username') TYPE = "文章" FIELD_ID = request.POST.get('field') DATE = request.POST.get('time') DETAIL = request.POST.get('detail') DETAIL = DETAIL.replace("\n", "\\\\n") print(DETAIL) DETAIL = '{"detail":"' + DETAIL + '"' + '}' print(DETAIL) elif request.method == 'GET': type = request.GET.get('type') if type == '0': print("[指令]某用户发布[动态]内容") print("username:", request.GET.get('username')) print("type: 动态") print("field:", request.GET.get('field')) print("time:", request.GET.get('time')) print("detail:", request.GET.get('detail')) USERNAME = request.GET.get('username') TYPE = "动态" FIELD_ID = request.GET.get('field') DATE = request.GET.get('time') DETAIL = request.GET.get('detail') DETAIL = DETAIL.replace("\n", "\\\\n") print(DETAIL) DETAIL = '{"detail":"' + DETAIL + '"' + '}' print(DETAIL) elif type == '1': print("[指令]某用户发布[项目]内容") print("username:", request.GET.get('username')) print("type: 项目") print("field:", request.GET.get('field')) print("time:", request.GET.get('time')) print('title:', request.GET.get('title')) print('nodeone', request.GET.get('nodeone')) print('nodetwo', request.GET.get('nodetwo')) print('nodethree', request.GET.get('nodethree')) print("detail:", request.GET.get('detail')) USERNAME = request.GET.get('username') TYPE = "项目" FIELD_ID = request.GET.get('field') DATE = request.GET.get('time') DETAIL = request.GET.get('detail') TITLE = request.GET.get('title') NODEONE = request.GET.get('nodeone') NODETWO = request.GET.get('nodetwo') NODETHREE = request.GET.get('nodethree') DETAIL = DETAIL.replace("\n", "\\\\n") DETAIL = '{"title":"' + TITLE + '"' + \',"nodeone":"' + NODEONE + '"' + \',"nodetwo":"' + NODETWO + '"' + \',"nodethree":"' + NODETHREE + '"' + \',"detail":"' + DETAIL + '"' + \'}' print(DETAIL) elif type == '2': print("[指令]某用户发布[文章]内容") print("username:", request.GET.get('username')) print("type: 文章") print("field:", request.GET.get('field')) print("time:", request.GET.get('time')) print("detail:", request.GET.get('detail')) USERNAME = request.GET.get('username') TYPE = "文章" FIELD_ID = request.GET.get('field') DATE = request.GET.get('time') DETAIL = request.GET.get('detail') DETAIL = DETAIL.replace("\n", "\\\\n") print(DETAIL) DETAIL = '{"detail":"' + DETAIL + '"' + '}' print(DETAIL) content_insertsql = ''' INSERT INTO USER_CONTENTS (TYPE,DATE,READVALUE,DETAIL,USER_ID,FIELD_ID) VALUE('%s','%s',0,'%s','%s',%s) ''' % (TYPE, DATE, DETAIL, USERNAME, FIELD_ID) # c.使用execute()方法执行SQL语句 cur.execute(content_insertsql) database.commit() # d.关闭数据库连接 database.close() print("[上传内容指令]已经关闭WHXD数据库连接!") return HttpResponse("OK")# --------------------------已完成-分割线----------------------#@csrf_exemptdef deleteusercontent(request): USERNAME = '' TYPE = '' CONTENTID = '' if request.method == 'POST': print("[指令]删除用户内容") USERNAME = request.POST.get('username') TYPE = request.POST.get('type') CONTENTID = request.POST.get('contentid') elif request.method == 'GET': print("[指令]删除用户内容") USERNAME = request.GET.get('username') TYPE = request.GET.get('type') CONTENTID = request.GET.get('contentid') # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[删除用户创作内容]已经连接到WHXD数据库!") sql = ''' DELETE FROM USER_CONTENTS WHERE CONTENT_ID=%s AND USER_ID='%s' ''' % (CONTENTID, USERNAME) print(sql) cur.execute(sql) database.commit() # d.关闭数据库连接 database.close() print("[删除用户创作内容]已经关闭WHXD数据库连接!") return HttpResponse('OK')# --------------------------已完成-分割线----------------------#@csrf_exemptdef message(request): USERNAME = '' MESSAGETYPE = '' # 请求领域数据 if request.method == 'POST': print("[指令]消息列表") USERNAME = request.POST.get('username') MESSAGETYPE = request.POST.get('messagetype') elif request.method == 'GET': print("[指令]消息列表") USERNAME = request.GET.get('username') MESSAGETYPE = request.GET.get('messagetype') # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[请求消息列表]已经连接到WHXD数据库!") sql = '' if MESSAGETYPE == 'AGREE' or MESSAGETYPE == 'COLLECT': sql = '''SELECT %s.USER_ID,%s.CONTENT_ID FROM %s,USER_CONTENTSWHERE %s.CONTENT_ID=USER_CONTENTS.CONTENT_ID AND USER_CONTENTS.USER_ID = '%s'''' % (MESSAGETYPE, MESSAGETYPE, MESSAGETYPE, MESSAGETYPE, USERNAME) else: sql = '''SELECT DISCUSS.USER_ID,DISCUSS.CONTENT_ID,DISCUSS.DETAIL FROM DISCUSS,USER_CONTENTSWHERE DISCUSS.CONTENT_ID=USER_CONTENTS.CONTENT_ID AND USER_CONTENTS.USER_ID = '%s'''' % USERNAME print(sql) cur.execute(sql) result = cur.fetchall() # d.关闭数据库连接 database.close() print("[请求领域列表]已经关闭WHXD数据库连接!") result_len = len(result) if result_len == 0: print("领域列表查询为空!") return HttpResponse("NULL") else: backjson = {} backjson['sum'] = result_len if MESSAGETYPE == 'AGREE': for i in range(0, result_len): record = result[i][0] + "点赞你内容:" + str(result[i][1]) backjson[str(i)] = record elif MESSAGETYPE == 'COLLECT': for i in range(0, result_len): record = result[i][0] + "收藏你内容:" + str(result[i][1]) backjson[str(i)] = record else: for i in range(0, result_len): record = result[i][0] + "评论你内容:" + str(result[i][1]) + ",评论:" + result[i][2] backjson[str(i)] = record print("backjson is:", backjson) return HttpResponse(json.dumps(backjson, ensure_ascii=False))# --------------------------已完成-分割线----------------------#@csrf_exemptdef usercontentlist(request): USERNAME = '' TYPE = '' # 7.某用户动态列表请求指令处理 if request.method == 'POST': print("[指令]用户内容列表") USERNAME = request.POST.get('username') TYPE = request.POST.get('type') elif request.method == 'GET': print("[指令]用户内容列表") USERNAME = request.GET.get('username') TYPE = request.GET.get('type') # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') if TYPE == 'dtlist': # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[请求用户动态列表]已经连接到WHXD数据库!") sql = ''' SELECT CONTENT_ID,TYPE,DATE,READVALUE,DETAIL,USER_ID,FIELD_ID FROM USER_CONTENTS WHERE TYPE='动态' AND USER_ID='%s' ORDER BY DATE DESC''' % USERNAME cur.execute(sql) result = cur.fetchall() # d.关闭数据库连接 database.close() print("[请求用户动态列表]已经关闭WHXD数据库连接!") result_len = len(result) if result_len == 0: print("用户动态列表查询为空!") return HttpResponse("NULL") else: backjson = {} table_fiels = ['CONTENT_ID', 'TYPE', 'DATE', 'READVALUE', 'DETAIL', 'USER_ID', 'FIELD_ID'] backjson['sum'] = result_len for i in range(0, result_len): record = {} for j in range(0, len(result[i])): if j == 2: record[table_fiels[j]] = result[i][j].strftime('%Y-%m-%d %H:%M:%S') else: record[table_fiels[j]] = result[i][j] backjson[str(i)] = record print("backjson is:", backjson) return HttpResponse(json.dumps(backjson, ensure_ascii=False)) elif TYPE == 'xmlist': # a.打开数据库连接 database = pymysql.connect(host='localhost', user='root', password='000000', port=3306, database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[用户项目列表]已经连接到WHXD数据库!") sql = ''' SELECT CONTENT_ID,TYPE,DATE,READVALUE,DETAIL,USER_ID,FIELD_ID FROM USER_CONTENTS WHERE TYPE='项目' AND USER_ID='%s' ORDER BY DATE DESC''' % USERNAME cur.execute(sql) result = cur.fetchall() # d.关闭数据库连接 database.close() print("[用户项目列表]已经关闭WHXD数据库连接!") result_len = len(result) if result_len == 0: print("用户项目列表查询为空!") return HttpResponse("NULL") else: backjson = {} table_fiels = ['CONTENT_ID', 'TYPE', 'DATE', 'READVALUE', 'DETAIL', 'USER_ID', 'FIELD_ID'] backjson['sum'] = result_len for i in range(0, result_len): record = {} for j in range(0, len(result[i])): if j == 2: record[table_fiels[j]] = result[i][j].strftime('%Y-%m-%d %H:%M:%S') else: record[table_fiels[j]] = result[i][j] backjson[str(i)] = record print("backjson is:", backjson) return HttpResponse(json.dumps(backjson, ensure_ascii=False)) elif TYPE == 'wzlist': # a.打开数据库连接 database = pymysql.connect(host='localhost', user='root', password='000000', port=3306, database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[用户文章列表]已经连接到WHXD数据库!") sql = ''' SELECT CONTENT_ID,TYPE,DATE,READVALUE,DETAIL,USER_ID,FIELD_ID FROM USER_CONTENTS WHERE TYPE='文章' AND USER_ID='%s' ORDER BY DATE DESC''' % USERNAME cur.execute(sql) result = cur.fetchall() # d.关闭数据库连接 database.close() print("[用户文章列表]已经关闭WHXD数据库连接!") result_len = len(result) if result_len == 0: print("用户文章列表查询为空!") return HttpResponse("NULL") else: backjson = {} table_fiels = ['CONTENT_ID', 'TYPE', 'DATE', 'READVALUE', 'DETAIL', 'USER_ID', 'FIELD_ID'] backjson['sum'] = result_len for i in range(0, result_len): record = {} for j in range(0, len(result[i])): if j == 2: record[table_fiels[j]] = result[i][j].strftime('%Y-%m-%d %H:%M:%S') else: record[table_fiels[j]] = result[i][j] backjson[str(i)] = record print("backjson is:", backjson) return HttpResponse(json.dumps(backjson, ensure_ascii=False)) elif TYPE == 'collectlist': # a.打开数据库连接 database = pymysql.connect(host='localhost', user='root', password='000000', port=3306, database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[用户收藏列表]已经连接到WHXD数据库!") # 从收藏列表中找到USERNAME的收藏记录的CONTENT_ID sql = '''SELECT CONTENT_ID FROM COLLECT WHERE USER_ID='%s'''' % USERNAME print(sql) cur.execute(sql) result = cur.fetchall() result_len = len(result) finallresult = [] for i in range(0, result_len): # 从USER_CONTENTS表里查出改CONTENT_ID的详细信息 tsql = ''' SELECT CONTENT_ID,TYPE,DATE,READVALUE,DETAIL,USER_ID,FIELD_ID FROM USER_CONTENTS WHERE CONTENT_ID=%s ''' % result[i][0] print(tsql) cur.execute(tsql) tresult = cur.fetchall() finallresult.append(tresult[0]) # d.关闭数据库连接 database.close() print("[用户收藏列表]已经关闭WHXD数据库连接!") finallresult_len = len(finallresult) if finallresult_len == 0: print("用户收藏列表查询为空!") return HttpResponse("NULL") else: backjson = {} table_fiels = ['CONTENT_ID', 'TYPE', 'DATE', 'READVALUE', 'DETAIL', 'USER_ID', 'FIELD_ID'] backjson['sum'] = finallresult_len for i in range(0, finallresult_len): record = {} for j in range(0, len(finallresult[i])): if j == 2: record[table_fiels[j]] = finallresult[i][j].strftime('%Y-%m-%d %H:%M:%S') else: record[table_fiels[j]] = finallresult[i][j] backjson[str(i)] = record print("backjson is:", backjson) return HttpResponse(json.dumps(backjson, ensure_ascii=False))# --------------------------已完成-分割线----------------------#@csrf_exemptdef pulldiscuss(request): CONTENTID = '' # 请求领域数据 if request.method == 'POST': print("[指令]评论列表") CONTENTID = request.POST.get('contentid') elif request.method == 'GET': print("[指令]评论列表") CONTENTID = request.GET.get('contentid') # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[请求评论列表]已经连接到WHXD数据库!") sql = '''SELECT TIME,DETAIL,USER_ID FROM DISCUSS WHERE CONTENT_ID=%s ORDER BY TIME DESC'''%CONTENTID cur.execute(sql) result = cur.fetchall() # d.关闭数据库连接 database.close() print("[请求评论列表]已经关闭WHXD数据库连接!") result_len = len(result) if result_len == 0: print("内容评论列表查询为空!") return HttpResponse("NULL") else: backjson = {} backjson['sum'] = result_len for i in range(0, result_len): record = {} record['detail'] = result[i][0].strftime('%Y-%m-%d %H:%M:%S')+"\n"+result[i][1]+"\n"+result[i][2] backjson[str(i)] = record print("backjson is:", backjson) return HttpResponse(json.dumps(backjson, ensure_ascii=False))# --------------------------已完成-分割线----------------------#@csrf_exemptdef pushdiscuss(request): USERNAME = '' CONTENTID = '' DETAIL = '' TIME = '' # 请求领域数据 if request.method == 'POST': print("[指令]发布评论") USERNAME = request.POST.get('username') CONTENTID = request.POST.get('contentid') DETAIL = request.POST.get('detail') TIME = request.POST.get('time') elif request.method == 'GET': print("[指令]发布评论") USERNAME = request.GET.get('username') CONTENTID = request.GET.get('contentid') DETAIL = request.GET.get('detail') TIME = request.GET.get('time') # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[发布评论]已经连接到WHXD数据库!") sql = ''' INSERT INTO DISCUSS (TIME,DETAIL,CONTENT_ID,USER_ID) VALUE('%s','%s',%s,'%s') '''%(TIME,DETAIL,CONTENTID,USERNAME) print(sql) cur.execute(sql) database.commit() # d.关闭数据库连接 database.close() print("[发布评论]已经关闭WHXD数据库连接!") return HttpResponse("OK")# --------------------------已完成-分割线----------------------#@csrf_exemptdef count(request): USERNAME = '' # 请求领域数据 if request.method == 'POST': print("[指令]发布评论") USERNAME = request.POST.get('username') elif request.method == 'GET': print("[指令]发布评论") USERNAME = request.GET.get('username') # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[请求计数]已经连接到WHXD数据库!") sum =[] sql = '' result = '' sql = '''SELECT COUNT(*) FROM %s_FOLLOW'''%USERNAME cur.execute(sql) result = cur.fetchall() result = str(result[0][0]) print('sum:',result) sum.append(result) sql = '''SELECT COUNT(*) FROM %s_FANS'''%USERNAME cur.execute(sql) result = cur.fetchall() result = str(result[0][0]) print('sum:',result) sum.append(result) sql = ''' SELECT READVALUE FROM USER_CONTENTS WHERE USER_ID='%s' '''%USERNAME cur.execute(sql) result = cur.fetchall() tsum = 0 for i in range(0,len(result)): tsum = tsum + int(result[i][0]) result = str(tsum) print('sum:',result) sum.append(result) # d.关闭数据库连接 database.close() print("[请求计数]已经关闭WHXD数据库连接!") return HttpResponse('OK:'+sum[0]+','+sum[1]+','+sum[2])# --------------------------已完成-分割线----------------------#@csrf_exemptdef searchuser(request): USERNAME = '' OBJECTNAME = '' # 请求领域数据 if request.method == 'POST': print("[指令]搜索用户") USERNAME = request.POST.get('username') OBJECTNAME = request.POST.get('objectname') elif request.method == 'GET': print("[指令]搜索用户") USERNAME = request.GET.get('username') OBJECTNAME = request.GET.get('objectname') # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[搜索用户]已经连接到WHXD数据库!") sql = '' result = '' sql = '''SELECT USER_ID FROM USERS WHERE USER_ID='%s' '''%OBJECTNAME print(sql) cur.execute(sql) result = cur.fetchall() if len(result) == 0: # d.关闭数据库连接 database.close() print("[搜索用户]已经关闭WHXD数据库连接!") return HttpResponse('NULL') else: sql = '''SELECT FOLLOW_ID FROM %s_FOLLOW WHERE FOLLOW_ID='%s''''%(USERNAME.upper(),OBJECTNAME) cur.execute(sql) result = cur.fetchall() print(sql) # d.关闭数据库连接 database.close() print("[搜索用户]已经关闭WHXD数据库连接!") if len(result) == 0: return HttpResponse('OK:'+OBJECTNAME+'[关注]') else: return HttpResponse('OK:' + OBJECTNAME + '[已关注]')# --------------------------已完成-分割线----------------------#@csrf_exemptdef followlist(request): USERNAME = '' # 请求领域数据 if request.method == 'POST': print("[指令]用户关注列表请求") USERNAME = request.POST.get('username') elif request.method == 'GET': print("[指令]用户关注列表请求") USERNAME = request.GET.get('username') # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[关注列表请求]已经连接到WHXD数据库!") sql = '''SELECT FOLLOW_ID FROM %s_FOLLOW'''%USERNAME cur.execute(sql) result = cur.fetchall() # d.关闭数据库连接 database.close() print("[关注列表请求]已经关闭WHXD数据库连接!") result_len = len(result) if result_len == 0: return HttpResponse("NULL") else: backjson = {} backjson['sum'] = result_len for i in range(0,result_len): backjson[str(i)] = result[i][0]+'[已关注]' print("backjson is:", backjson) return HttpResponse(json.dumps(backjson, ensure_ascii=False))# --------------------------已完成-分割线----------------------#@csrf_exemptdef fanslist(request): USERNAME = '' # 请求领域数据 if request.method == 'POST': print("[指令]用户粉丝列表请求") USERNAME = request.POST.get('username') elif request.method == 'GET': print("[指令]用户粉丝列表请求") USERNAME = request.GET.get('username') # a.打开数据库连接 database = pymysql.connect(host='localhost' , user='root' , password='000000' , port=3306 , database='WHXD') # b.使用cursor()方法创建一个游标对象cur cur = database.cursor() print("[粉丝列表请求]已经连接到WHXD数据库!") sql = '''SELECT FANS_ID FROM %s_FANS'''%USERNAME cur.execute(sql) result = cur.fetchall() # d.关闭数据库连接 database.close() print("[粉丝列表请求]已经关闭WHXD数据库连接!") result_len = len(result) if result_len == 0: return HttpResponse("NULL") else: backjson = {} backjson['sum'] = result_len for i in range(0,result_len): backjson[str(i)] = result[i][0] print("backjson is:", backjson) return HttpResponse(json.dumps(backjson, ensure_ascii=False))# --------------------------已完成-分割线----------------------#def index(request): # 测试页面 return HttpResponse("OK")
5.3 urls.py
"""whxd URL ConfigurationThe `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/3.2/topics/http/urls/Examples:Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home')Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))"""from django.contrib import adminfrom django.urls import path,includefrom . import viewsurlpatterns = [ path('admin/', admin.site.urls), path('register/',views.register), path('login/',views.login), path('destory/',views.destory), path('worlddt/',views.worlddt), path('worldxm/',views.worldxm), path('worldwz/',views.worldwz), path('worldfield/',views.worldfield), path('usercontentlist/',views.usercontentlist), path('message/',views.message), path('followlist/', views.followlist), path('fanslist/', views.fanslist), path('pushcontent/', views.pushcontent), path('deleteusercontent/', views.deleteusercontent), path('read/',views.read), path('follow/', views.follow), path('unfollow/', views.unfollow), path('agree/', views.agree), path('unagree/', views.unagree), path('pulldiscuss/', views.pulldiscuss), path('pushdiscuss/', views.pushdiscuss), path('collect/',views.collect), path('uncollect/',views.uncollect), path('count/',views.count), path('searchuser/',views.searchuser), path('index/',views.index) #测试页面]
6. app运行视频(V2.0.0本地模拟器运行)
HarmonyOS应用-文化乡道[社区型APP][APP]
开发者涨薪指南
48位大咖的思考法则、工作方式、逻辑体系英文字体下载