关键词:
实现链接数据库端的朋友信息展示以及Socket通信学习
链接数据库的朋友信息并展示
package com.example.newbsh.UI.friends; import androidx.lifecycle.ViewModelProviders; import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; import android.widget.TextView; import com.example.newbsh.HttpUtil.HttpUtil; import com.example.newbsh.MainActivity; import com.example.newbsh.R; import com.example.newbsh.UI.friends.list.SideBar; import com.example.newbsh.UI.friends.list.SortAdapter; import com.example.newbsh.UI.friends.list.User; import org.json.JSONArray; import org.json.JSONException; import java.util.ArrayList; import java.util.Collections; public class FriendFragment extends Fragment private FriendViewModel mViewModel; private View view; private ListView listView; private SideBar sideBar; private ArrayList<User> list; private Handler handler; private String getUsername() return MainActivity.getUserName(); public static FriendFragment newInstance() return new FriendFragment(); @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) view=inflater.inflate(R.layout.friend_fragment, container, false); return view; @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) super.onActivityCreated(savedInstanceState); mViewModel = ViewModelProviders.of(this).get(FriendViewModel.class); // TODO: Use the ViewModel initView(); getThreadData(); handler = new Handler(new Handler.Callback() @Override public boolean handleMessage(@NonNull Message msg) //线程回调更新数据 if (msg.what == 200) list=new ArrayList<>(); JSONArray jsonArray=(JSONArray)msg.obj; for(int i=0;i<jsonArray.length();i++) try String friendname= (String) jsonArray.getJSONObject(i).get("friendname"); String friendurl= (String) jsonArray.getJSONObject(i).get("friendurl"); User bean=new User(friendname,friendurl); list.add(bean); catch (JSONException e) e.printStackTrace(); Collections.sort(list); // 对list进行排序,需要让User实现Comparable接口重写compareTo方法 SortAdapter adapter = new SortAdapter(view.getContext(), list); listView.setAdapter(adapter); return true; ); private void initView() listView = (ListView) view.findViewById(R.id.listView); sideBar = (SideBar) view.findViewById(R.id.side_bar); sideBar.setOnStrSelectCallBack(new SideBar.ISideBarSelectCallBack() @Override public void onSelectStr(int index, String selectStr) for (int i = 0; i < list.size(); i++) if (selectStr.equalsIgnoreCase(list.get(i).getFirstLetter())) listView.setSelection(i); // 选择到首字母出现的位置 return; ); private void getThreadData() //线程封装网络请求 new Thread(new Runnable() @Override public void run() String reqdata = ""; String address="http://39.97.181.86/BaiXiaoSheng/myfriend?username="+getUsername(); try final JSONArray json = new JSONArray(String.valueOf(HttpUtil.sendPost(address, reqdata))); Log.d("tag", json.toString()); Message msg = new Message(); msg.what = 200; msg.obj = json; handler.sendMessage(msg); catch (JSONException e) e.printStackTrace(); ).start();
Socket通信与本地服务器端链接
服务器端:
package servlet; import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.security.Provider; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Server private static final int PORT=12345; private List<Socket> mlist=new ArrayList<>(); private ServerSocket server=null; private ExecutorService myExecutorService=null; public static void main(String[] args) new Server(); public Server() try server=new ServerSocket(PORT); //创建线程池 myExecutorService=Executors.newCachedThreadPool(); System.out.println("服务端运行中... "); Socket client=null; while(true) client=server.accept(); mlist.add(client); myExecutorService.execute(new Service(client)); catch (Exception e) e.printStackTrace(); class Service implements Runnable private Socket socket; private BufferedReader in = null; private String msg = ""; public Service(Socket socket) this.socket = socket; try in = new BufferedReader(new InputStreamReader(socket.getInputStream())); msg = "用户:" +this.socket.getInetAddress() + "~加入了聊天室" +"当前在线人数:" +mlist.size(); this.sendmsg(); catch(IOException e)e.printStackTrace(); @Override public void run() try while (true) if((msg=in.readLine())!=null) if(msg.equals("bye")) System.out.println("~~~~~~~~~~~"); mlist.remove(socket); in.close(); msg = "用户:" + socket.getInetAddress() + "退出:" +"当前在线人数:"+mlist.size(); socket.close(); this.sendmsg(); break; else msg=socket.getInetAddress()+" 说:"+msg; this.sendmsg(); catch (Exception e) e.printStackTrace(); //为连接上服务端的每个客户端发送信息 public void sendmsg() System.out.println(msg); int num = mlist.size(); for(int index = 0;index < num;index++) Socket mSocket = mlist.get(index); PrintWriter pout = null; try pout = new PrintWriter(new BufferedWriter( new OutputStreamWriter(mSocket.getOutputStream(),"UTF-8")),true); pout.println(msg); catch (IOException e) e.printStackTrace();
安卓端:
package com.example.sockettest; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.StrictMode; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; public class SocketActivity extends AppCompatActivity implements Runnable //定义相关变量,完成初始化 private TextView txtshow; private EditText editsend; private Button btnsend; private static final String HOST = "192.168.137.1"; private static final int PORT = 12345; private Socket socket = null; private BufferedReader in = null; private PrintWriter out = null; private String content = ""; private StringBuilder sb = null; //定义一个handler对象,用来刷新界面 public Handler handler = new Handler() public void handleMessage(Message msg) if (msg.what == 0x123) sb.append(content); txtshow.setText(sb.toString()); ; @Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_socket); if (android.os.Build.VERSION.SDK_INT > 9) StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); sb = new StringBuilder(); txtshow = (TextView) findViewById(R.id.txtshow); editsend = (EditText) findViewById(R.id.editsend); btnsend = (Button) findViewById(R.id.btnsend1); //当程序一开始运行的时候就实例化Socket对象,与服务端进行连接,获取输入输出流 //因为4.0以后不能再主线程中进行网络操作,所以需要另外开辟一个线程 new Thread() public void run() try socket = new Socket(HOST, PORT); in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8")); out = new PrintWriter(new BufferedWriter(new OutputStreamWriter( socket.getOutputStream())), true); catch (IOException e) e.printStackTrace(); .start(); new Thread(new Runnable() @Override public void run() btnsend.setOnClickListener(new View.OnClickListener() @Override public void onClick(View v) String msg = editsend.getText().toString(); if (socket.isConnected()) if (!socket.isOutputShutdown()) out.println(msg); ); ).start(); //为发送按钮设置点击事件 new Thread(SocketActivity.this).start(); //重写run方法,在该方法中输入流的读取 @Override public void run() try while (true) if (socket.isConnected()) if (!socket.isInputShutdown()) if ((content = in.readLine()) != null) content += " "; handler.sendEmptyMessage(0x123); catch (Exception e) e.printStackTrace();
团队冲刺第二十五天(代码片段)
完成了关于定位之后点击按钮显示当地天气的相关操作。遇到的主要的问题是。有的时候在第二次进入的是时候存在显示不及时的情况。自己的就觉办法是。添加了下拉刷新的时事件。完美解决问题。实验的主要代码如下记忆运... 查看详情
灭霸-个人冲刺第五天(代码片段)
1,昨天的成就: a) 完成的任务:修改框架,数据库连接 b) 所花时间:8h c) 还剩余0h2,遇到的困难:a) 数据库虽 查看详情
冲刺大厂每日算法&面试题,动态规划21天——第十五天(代码片段)
目录标题导读21天动态规划入门面试题点击直接资料领取导读肥友们为了更好的去帮助新同学适应算法和面试题,最近我们开始进行专项突击一步一步来。我们先来搞一下让大家最头疼的一类算法题,动态规划我们将进行... 查看详情
暑假第十五天之每天一些题系列(代码片段)
暑假第十五天之每天一些题系列一、选择题以下程序运行结果是intmain()chara[]="123456789",*p=a;inti=0;while(*p)if(i%2==0)*p='!';i++;p++;puts(a);return0;A.1!3!5!7!9B.!1!3!5!7 查看详情
冲击红队第十五天-union联合注入(代码片段)
...#xff01;!!!今天更新的是:冲击红队第十五天-union联合注入创建时间:2021年10月6日冲击红队第十五天 查看详情
钢镚儿冲刺一周期第五天(代码片段)
一、说在前面 今天打算先放下在权限前面弹框,先学会如何动态的申请权限。二、大体思路 有之前小账本的经验,今天先写一个申请权限的例子,再写的过程当中寻找灵感。三、代码 publicclassMainActivityextendsActivityimpl... 查看详情
python第四十五天(sqlalchemy)的操作(代码片段)
回顾:使用PyMySQLl操作MySQL使用PyMySQL的前提: 1.先建好表 2.自己动手需要手动去写多条SQL语句 改进: 类------> 表 实例化->数据这种思想叫:ORM(ObjectRelationshipMapping)对象关系映射SQLAlchemy是Python编程语... 查看详情
mysql基础第二十五天,使用视图(代码片段)
视图视图的作用selectcust_nam.ide,cust_contactfromcustomerscjoinorderoonc.cust_id=o.custjoinono.order_num=oi.order_numwhereprod_id='TNT2';视图的规则和限制使用视图创建视图createviewview_productcustomerasse 查看详情
小组冲刺第五天
今天是小组冲刺第五天,昨天遗留下来的问题是代码的拼接出现问题,总调试不出来,问了其他同学无果,索性又找了一个新的,是用C#做的,效果很好! 查看详情
冲刺大厂每日算法&面试题,动态规划21天——第五天(代码片段)
目录标题导读21天动态规划入门面试题资料领取导读肥友们为了更好的去帮助新同学适应算法和面试题,最近我们开始进行专项突击一步一步来。我们先来搞一下让大家最头疼的一类算法题,动态规划我们将进行为时21天... 查看详情
刷题的狂欢-----java每日三练-----第十五天(代码片段)
努力刷题,每日三题,题目来源于“牛客网”。第一题importjava.util.*;publicclassMainpublicstaticvoidmain(String[]args)Scannerscanner=newScanner(System.in);inti,j,k;while(scanner.hasNext())intLine=scanne 查看详情
java第十五天-总结1(代码片段)
1.==与equals当比较包装类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用==。2.堆,栈,静态区域Java自动管理栈和堆,程序员不能直接地设置栈或堆。... 查看详情
冲刺十九天(代码片段)
学习分享亮点加入与保存用户信息(自动登录)学习分享亮点 我在学习分享板块加入“课后题”,“往届期末相关试卷及答案”,“网课答案”等内容,通过一个广告链接接入到改页面,然后在该页面... 查看详情
javav自学笔记第十五天(代码片段)
位与运算符为&,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位同时为1,那么计算结果才为1,否则为0。因此,任何数与0进行按位与运算,其结果都为0。位或运算符为|,其运算规则是:... 查看详情
冲刺合集
第一天第二天第三天第四天第五天第六天第七天第八天第九天第十天第十一天第十二天测试随笔冲刺总结随笔 查看详情
河北重大技术需求开发第七版开发第十五天(代码片段)
图图联动示意图: 代码:<%@页language="java"contentType="text/html;charset=utf-8"pageEncoding="utf-8"进="java。sql.*"%><!DOCTYPEhtml><html><头><元charset="utf-8"><题>图图联动& 查看详情
二刷java基础第十五天——初识api(代码片段)
java的API:是对面向对象的理论方面的一个总结java中的顶级父类就是继承Object类。Object:第一步打开api索引,直接搜索你想要的的类String:String用了final不能被继承继承了Object实现了三个接口之前在使用String没有new那是因为... 查看详情
(92)wangdao.com_第二十五天_事件event(代码片段)
1.事件Event事件的本质是:程序各个组成部分之间的一种通信方式,也是异步编程的一种实现DOM的事件操作分为:监听 和触发 都定义在EventTarget接口____所有节点对象都部署了EventTarget 接口,其他一些需要... 查看详情