日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Android?Studio實現智能聊天_Android

作者:醉流年 ? 更新時間: 2022-09-13 編程語言

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

原文鏈接:https://blog.csdn.net/weixin_63307826/article/details/123942426

欄目分類
最近更新