本文实例为大家分享了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。
本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728