AndroidStudio实现智能聊天

AndroidStudio实现智能聊天

本文实例为大家分享了Android Studio实现智能聊天的具体代码,供大家参考,具体内容如下

1、布局activit_main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas.android.com/apk/res-auto"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="vertical"     tools:context=".MainActivity">     <androidx.recyclerview.widget.RecyclerView         android:layout_width="match_parent"         android:layout_height="0dp"         android:layout_weight="1"         android:id="@+id/recycle">     </androidx.recyclerview.widget.RecyclerView>     <LinearLayout         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:orientation="horizontal">         <EditText             android:layout_width="0dp"             android:layout_height="wrap_content"             android:layout_weight="1"             android:id="@+id/input"/>         <Button             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:id="@+id/send"             android:text="发送"/>     </LinearLayout> </LinearLayout>

2、创建子布局msg_item,显示聊天对话框

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="vertical"     android:layout_width="match_parent"     android:padding="10dp"     android:layout_height="wrap_content">     <LinearLayout         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:id="@+id/left_layout"         android:layout_gravity="left"         android:background="@drawable/message_left">         <TextView             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:textSize="20sp"             android:layout_marginTop="10dp"             android:id="@+id/left_msg"/>     </LinearLayout>     <LinearLayout         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:id="@+id/right_layout"         android:layout_gravity="right"         android:layout_marginLeft="10dp"         android:background="@drawable/message_right">         <TextView             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:textSize="20sp"             android:layout_marginTop="10dp"             android:id="@+id/right_msg"/> </LinearLayout>

3、创建类Msg获取数据

public class Msg {     public static final int MSG_RECEIVED = 0;     public static final int MSG_SEND =1 ;     private String content;     private int type;     public Msg(String content,int type){         this.content=content;         this.type=type;     }     public String getContent() {         return content;     }     public int getType() {         return type;     } }

4、创建RecyclerView的适配器,MsgAdapter继RecyclerView.Adapter<MsgAdapter.ViewHolder>

 public class MsgAdapter extends RecyclerView.Adapter<MsgAdapter.ViewHolder> {     private List<Msg> mMsgList;     public class ViewHolder extends RecyclerView.ViewHolder {         LinearLayout leftLayout;         TextView leftMsg;         LinearLayout rightLayout;         TextView rightMsg;         public ViewHolder(@NonNull View itemView) {             super(itemView);             leftLayout=itemView.findViewById(R.id.left_layout);             rightLayout=itemView.findViewById(R.id.right_layout);             leftMsg=itemView.findViewById(R.id.left_msg);             rightMsg=itemView.findViewById(R.id.right_msg);         }     }     public MsgAdapter(List<Msg> msgList){         mMsgList=msgList;     }     @NonNull     @Override     public MsgAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {         View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.msg_item,parent,false);         ViewHolder holder=new ViewHolder(view);         return holder;     }     @Override     public void onBindViewHolder(@NonNull MsgAdapter.ViewHolder holder, int position) {         Msg msg=mMsgList.get(position);         if (msg.getType()==Msg.MSG_RECEIVED){             holder.leftLayout.setVisibility(View.VISIBLE);             holder.rightLayout.setVisibility(View.GONE);             holder.leftMsg.setText(msg.getContent());         }else if (msg.getType()==Msg.MSG_SEND){             holder.leftLayout.setVisibility(View.GONE);             holder.rightLayout.setVisibility(View.VISIBLE);             holder.rightMsg.setText(msg.getContent());         }     }     @Override     public int getItemCount() {         return mMsgList.size();     }

5、创建 RobotManager类封装网络,网络地址:青云客,智能聊天机器人

public class RobotManager {     private static String Url="http://api.qingyunke.com/api.php?key=free&appid=0&msg=!!";     public static String getUrl(String question){         String real_Url=Url.replace("!!",question);         return real_Url;     } }

6、逻辑

public class MainActivity extends AppCompatActivity {     private static String TAG="MainActivity";     private List<Msg> msgList = new ArrayList<>();     private EditText input;     private RecyclerView recyclerView;     private LinearLayoutManager manager;     private Button button;     private MsgAdapter adapter;     private String input_text;     private StringBuilder response;     private Handler handler = new Handler() {     @Override         public void handleMessage(Message msg) {             //获取解析数据,显示在Recycle中             Bundle data = msg.getData();             String result = data.getString("result");             Msg msg_get = new Msg(result, Msg.MSG_RECEIVED);             msgList.add(msg_get);                 //数据刷新             adapter.notifyItemInserted(msgList.size() - 1);             recyclerView.scrollToPosition(msgList.size() - 1);         }     };     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         initMsg();//初始化数据         recyclerView = findViewById(R.id.recycle);         button = findViewById(R.id.send);         input = findViewById(R.id.input);         manager = new LinearLayoutManager(this);         recyclerView.setLayoutManager(manager);         adapter = new MsgAdapter(msgList);         recyclerView.setAdapter(adapter);         button.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View view) {                 input_text = input.getText().toString();                 Msg msg = new Msg(input_text, Msg.MSG_SEND);                 msgList.add(msg);                 adapter.notifyItemInserted(msgList.size() - 1);                 recyclerView.scrollToPosition(msgList.size() - 1);                 input.setText("");                 getInter();   //发起网络请求             }         });     }     private void getInter() {         //开起线程         new Thread(new Runnable() {             @Override             public void run() {                 HttpURLConnection connection = null;                 BufferedReader reader = null;                 try {                     URL url = new URL(RobotManager.getUrl(input_text));                     connection = (HttpURLConnection) url.openConnection();                     connection.setRequestMethod("GET");                     connection.setReadTimeout(8000);                     connection.setConnectTimeout(8000);                     InputStream in = connection.getInputStream();                     reader = new BufferedReader(new InputStreamReader(in));                     StringBuilder response = new StringBuilder();                     String line = "";                     while ((line = reader.readLine()) != null) {                         response.append(line);                     }                     // 2,解析获得的数据                     Gson gson=new Gson();                     Msg msg=gson.fromJson(response.toString(),Msg.class);                     Log.d(TAG, "result:" + msg.getType());                     Log.d(TAG, "content:" + msg.getContent());                     // 3,将解析的数据保存到 Message中,传递到主线程中显示                     Bundle data=new Bundle();                     Message msg1=new Message();                     if (msg.getType()==0){                         data.putString("result",msg.getContent());                     }else {                         data.putString("result","我不知道你在说什么!");                     }                     msg1.setData(data);                     msg1.what=1;                     handler.sendMessage(msg1);                 } catch (MalformedURLException e) {                     e.printStackTrace();                 } catch (ProtocolException e) {                     e.printStackTrace();                 } catch (IOException e) {                     e.printStackTrace();                 } finally {                     if (reader != null) {                         try {                             reader.close();                         } catch (IOException e) {                             e.printStackTrace();                         }                     }                     if (connection != null) {                         connection.disconnect();                     }                 }             }         }).start();     }     private void initMsg() {         Msg msg = new Msg("我是菲菲,快来和我聊天吧!", Msg.MSG_RECEIVED);         msgList.add(msg);     } }

推荐阅读