日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Android studio開發小型對話機器人app(實例代碼)

瀏覽:97日期:2022-09-24 18:30:15

前言

偶然在網上看到一個免費機器人接口,所以生此想法,接口地址:http://api.qingyunke.com/,Android開發比爬蟲要繁瑣得多,所以本文我將細說接口的調用方法,讀者可根據思路去網上找一些免費接口拿來玩,其他代碼一帶而過,詳細源碼見文末。

成品展示:

Android studio開發小型對話機器人app(實例代碼)

開發步驟

1)新建項目empty,必要可github托管。

2)先寫頁面在res->layout目錄下新建兩個layout xml file

Android studio開發小型對話機器人app(實例代碼)

activity_main作為主頁面,msg_item為附在其上的消息頁面。(具體代碼見文末)

這里再acitvity_main采用的不是ListView而是RecyclerView。

(3)寫接口調用首先封裝一個RobotManager類,用于接收用戶輸入之后對Url進行封裝。

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);//將url中的!!替換為用戶輸入的內容 return real_url; }}

其次在java->第一個包下創建一個接口GetConnection,用來接收接口返回的返回。

public interface GetConnection { void onFinish(String response);//返回正常 void onError(Exception e);//返回錯誤}

然后開始寫MyConnection類,調用接口,給參,并通過GetConnection接口將網上接口返回的數據傳遞出去。

public class MyConnection { public static void getResponse(final String url,final GetConnection getConnection){ new Thread(new Runnable() { @Override public void run() { HttpURLConnection connection; try{ URL Url = new URL(url); connection = (HttpURLConnection) Url.openConnection(); connection.setRequestMethod('GET');//Get方法 connection.setConnectTimeout(2000);//延時時間 connection.setReadTimeout(3000); connection.setDoInput(true); InputStream in = connection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } Log.e('result',response.toString()); if (getConnection != null) { getConnection.onFinish(response.toString()); }else { Log.e('WeiNull','WeiNull');//測試時用的,無須關心。 } }catch(IOException io) { if (getConnection != null) { getConnection.onError(io); } } } }).start(); }}

(4)寫頁面邏輯頁面邏輯主要是將從接口得到的內容渲染到頁面上。首先進行一系列初始化,綁定布局,然后監聽按鈕點擊接收用戶輸入,調用MyConnection類傳入url,輸入內容接收接口返回內容,同時用handler動態更新頁面。

public class MainActivity extends AppCompatActivity { private List<Msg> msgList = new ArrayList<Msg>(); private EditText inputText; private Button send; private RecyclerView msgRecyclerView; private MsgAdapter adapter; private Handler handler = new Handler(){ @Override public void handleMessage(@NonNull Message msg) { switch (msg.what){ case 1:{ Bundle data = msg.getData(); String result = data.getString('result'); Msg robotMsg = new Msg(result,Msg.TYPE_RECEIVED); msgList.add(robotMsg); adapter.notifyItemInserted(msgList.size() - 1); // 當有新消息時,刷新ListView中的顯示 msgRecyclerView.scrollToPosition(msgList.size() - 1); // 將ListView定位到最后一行 }break; case 2:{}break; default:break; } } }; private void getInter(String content){ MyConnection.getResponse(RobotManager.getUrl(content), new GetConnection() { @Override public void onFinish(String response) { ContentBean contentBean = new ContentBean(); Log.e('getResult',response); Message msg = new Message(); Bundle data = new Bundle(); Gson gson = new Gson(); contentBean = gson.fromJson(response,ContentBean.class);//用Gson將返回內容序列化為ContentBean對象。 if(contentBean.getResult()==0){ data.putString('result',contentBean.getContent()); }else{ data.putString('result','我聽不懂你在說什么呀!'); } msg.setData(data); msg.what = 1; handler.sendMessage(msg); } @Override public void onError(Exception e) { e.printStackTrace(); } }); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initMsgs(); // 初始化消息數據 inputText = findViewById(R.id.input_text); send = findViewById(R.id.send); msgRecyclerView = findViewById(R.id.msg_recycler_view); LinearLayoutManager layoutManager = new LinearLayoutManager(this); msgRecyclerView.setLayoutManager(layoutManager); adapter = new MsgAdapter(msgList); msgRecyclerView.setAdapter(adapter); send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String content = inputText.getText().toString(); if (!''.equals(content)) { Msg msg = new Msg(content, Msg.TYPE_SENT); msgList.add(msg); getInter(content); Log.e('url',RobotManager.getUrl(content)); adapter.notifyItemInserted(msgList.size() - 1); // 當有新消息時,刷新ListView中的顯示 msgRecyclerView.scrollToPosition(msgList.size() - 1); // 將ListView定位到最后一行 inputText.setText(''); // 清空輸入框中的內容 } } }); } private void initMsgs() { Msg msg1 = new Msg('我是菲菲,快來和我聊天吧* ( ´͈ ᵕ `͈ )◞♡', Msg.TYPE_RECEIVED); msgList.add(msg1); }}

由于接口返回的數據是Json格式,所以我們需要對Json進行解析,本文采用google的Gson庫對其進行解析,將接口內容序列化為一個類ContentBean。解析過程見上面代碼。

public class ContentBean { /** * result : 0 * content : [04月08日] 邯鄲天氣:小雨,白天 17℃,夜晚 9℃,微風,<3級轉3-4級 */ private int result; private String content; public int getResult() { return result; } public void setResult(int result) { this.result = result; } public String getContent() { return content; } public void setContent(String content) { this.content = content; }}

(5)其余代碼Msg和MsgAdapter用于解析消息是發送方還是接收方并展示在消息列表上Msg

public class Msg { public static final int TYPE_RECEIVED = 0; public static final int TYPE_SENT = 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; }}

MsgAdapter

public class MsgAdapter extends RecyclerView.Adapter<MsgAdapter.ViewHolder> { private List<Msg> mMsgList; static class ViewHolder extends RecyclerView.ViewHolder { LinearLayout leftLayout; LinearLayout rightLayout; TextView leftMsg; TextView rightMsg; public ViewHolder(View view) { super(view); leftLayout = (LinearLayout) view.findViewById(R.id.left_layout); rightLayout = (LinearLayout) view.findViewById(R.id.right_layout); leftMsg = (TextView) view.findViewById(R.id.left_msg); rightMsg = (TextView) view.findViewById(R.id.right_msg); } } public MsgAdapter(List<Msg> msgList) { mMsgList = msgList; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.msg_item, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder holder, int position) { Msg msg = mMsgList.get(position); if (msg.getType() == Msg.TYPE_RECEIVED) { // 如果是收到的消息,則顯示左邊的消息布局,將右邊的消息布局隱藏 holder.leftLayout.setVisibility(View.VISIBLE); holder.rightLayout.setVisibility(View.GONE); holder.leftMsg.setText(msg.getContent()); } else if(msg.getType() == Msg.TYPE_SENT) { // 如果是發出的消息,則顯示右邊的消息布局,將左邊的消息布局隱藏 holder.rightLayout.setVisibility(View.VISIBLE); holder.leftLayout.setVisibility(View.GONE); holder.rightMsg.setText(msg.getContent()); } } @Override public int getItemCount() { return mMsgList.size(); }}

尾聲

以上代碼可復制使用,但其中有一些圖片,類庫什么的需要自行導入,完整代碼見geithub:點擊此處直達

該項目是我早期項目,只是為了記錄當初的開發流程,所以并不存在什么設計模式,代碼結構也比較亂,注釋也比較少,如果有任何問題,歡迎添加我的QQ詢問!

總結

到此這篇關于Android studio開發一個小型對話機器人app的文章就介紹到這了,更多相關android studio 對話機器人內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲精品进入| 中文日韩在线| 精品国产欧美| 欧美日韩一区二区三区在线电影| 国产精品一区二区精品视频观看| 国产一区二区精品久| 日韩欧美在线精品| 国产亚洲久久| 国产日韩在线观看视频| 另类专区亚洲| 蜜臀国产一区| 丝瓜av网站精品一区二区| 人人草在线视频| 最新亚洲一区| 久久av一区| 久久影视三级福利片| 久久香蕉精品香蕉| 激情综合激情| 欧美日韩午夜| 精品国产不卡| 蜜臀久久99精品久久久久宅男| 欧美精品中文| 日韩影院二区| 98精品久久久久久久| 日本精品黄色| 日韩成人精品一区二区三区| 日韩不卡视频在线观看| 在线视频日韩| 久久国产精品色av免费看| 精品亚洲自拍| 精品视频国内| 日韩一二三区在线观看| 国内自拍视频一区二区三区| 日韩不卡手机在线v区| 久久永久免费| 亚洲视频国产| 美女国产精品| 中文字幕亚洲精品乱码| 蜜臀国产一区| 欧美日韩在线播放视频| 麻豆视频观看网址久久| 自拍日韩欧美| 成人在线视频免费| 欧美久久精品| 国产视频亚洲| 国产欧美啪啪| 黑人精品一区| 国产精品99精品一区二区三区∴| 性色一区二区| 久久99影视| 中文字幕日本一区| 91一区二区| 亚洲字幕久久| 婷婷中文字幕一区| 国产精品蜜月aⅴ在线| 日韩欧美不卡| 美女视频网站久久| 欧美日韩视频免费观看| 中文日韩在线| 九九综合在线| 国产麻豆精品久久| 日本三级亚洲精品| 97se综合| 精品一区二区三区在线观看视频| 日本一区二区三区视频在线看| 亚洲一级网站| 日韩美女国产精品| 丝瓜av网站精品一区二区 | 石原莉奈一区二区三区在线观看 | 免费一区二区三区在线视频| 亚洲欧美久久| 狠狠久久婷婷| 久久99性xxx老妇胖精品| 国产亚洲精aa在线看| 日韩国产在线观看| 欧美午夜精彩| 色婷婷亚洲mv天堂mv在影片| 国产免费久久| 91久久久精品国产| 在线日韩av| 久久久久.com| 九九久久国产| 卡一卡二国产精品| 国产麻豆一区| 欧美日韩视频免费观看| 92国产精品| 免费成人网www| 精品一区二区三区四区五区| 婷婷精品进入| 久久精品国产在热久久| 另类av一区二区| 久久国产精品毛片| 欧洲毛片在线视频免费观看| 成人污污视频| 蜜臀91精品一区二区三区| 视频在线观看一区二区三区| 精品三区视频| 深夜日韩欧美| 欧美影院精品| 国产极品嫩模在线观看91精品| 久热精品在线| 亚洲精品大片| 福利一区和二区| 黄色免费成人| 激情久久五月| 国产美女精品| 欧美日韩视频免费观看| 日韩福利视频导航| 国产亚洲激情| 蜜桃精品在线| 国产高潮在线| 激情久久99| 久久av电影| 日本一区中文字幕| 成人污污视频| 成人在线视频中文字幕| 久久精品网址| 成人在线超碰| 中文在线а√在线8| 国产高潮在线| 日韩欧美三级| 999国产精品| 国产91久久精品一区二区| 日韩成人亚洲| 欧美三级网址| 色老板在线视频一区二区| 中文字幕高清在线播放| 日本成人中文字幕在线视频| 亚洲网址在线观看| 欧美va天堂在线| 国产99精品一区| 九一成人免费视频| 精品日韩毛片| 亚洲精品1区| 国产农村妇女精品一二区| 久久久久久久久丰满| 亚洲电影在线| 亚洲午夜91| 免费精品视频| 亚洲精品人人| 国产欧美69| 国产福利资源一区| 老司机精品视频在线播放| 国产一区二区三区四区二区| 精品欧美日韩精品| 秋霞影视一区二区三区| 午夜精品婷婷| 日本欧美一区二区| 久久久免费人体| 日本免费一区二区三区四区| 午夜国产一区二区| 日韩欧美中文字幕在线视频| 欧美91在线|欧美| 偷拍精品精品一区二区三区| 日韩成人综合| 激情偷拍久久| 日本vs亚洲vs韩国一区三区二区| 国产精品视频一区二区三区四蜜臂| 国产精品一二| 日韩精品第一区| 亚洲一区二区三区高清不卡| 奇米色欧美一区二区三区| 国产乱码午夜在线视频| 久久国产高清| 国产精品入口久久| 亚洲精品一区二区在线看| 中文字幕亚洲在线观看| 日韩在线观看一区二区| 日韩一区二区三免费高清在线观看 | 少妇久久久久| 色天使综合视频| 亚洲成人不卡| 亚洲一区二区三区四区五区午夜| 蜜桃视频在线观看一区| 国产精品成人国产| 99精品视频在线观看免费播放| 久久xxxx精品视频| 免费在线日韩av| 欧美日韩四区| 国产精品videossex| 色爱av综合网| 亚洲精品激情| 水蜜桃精品av一区二区| 亚洲欧美日本国产专区一区| 日韩国产精品久久久久久亚洲| 精品精品久久| 蜜臀av性久久久久蜜臀aⅴ流畅| 久久97视频| 亚洲成人免费| 国产福利一区二区精品秒拍 | 中文字幕在线免费观看视频| 亚洲作爱视频| 激情久久99| 日本一区二区三区中文字幕| 国产v综合v| 69堂免费精品视频在线播放| 亚洲91视频| 中文字幕一区二区三区在线视频| 精品视频自拍| 亚洲欧美在线专区|