经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
Android Studio实现智能聊天
来源:jb51  时间:2022/7/20 13:09:03  对本文有异议

本文实例为大家分享了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);
? ? }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接: NPS