柚子快报激活码778899分享:冲刺十五天

http://yzkb.51969.com/

实现链接数据库端的朋友信息展示以及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 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

{

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 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("服务端运行中...\n");

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 += "\n";

handler.sendEmptyMessage(0x123);

}

}

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

 

 

 

 

 

 

柚子快报激活码778899分享:冲刺十五天

http://yzkb.51969.com/

精彩链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。