亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

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

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

瀏覽:6日期: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
相關文章:
主站蜘蛛池模板: 韩国尤物主播性视频在线播放 | 精品成人乱色一区二区 | 看黄色一级大片 | 中文字幕第98页小明免费 | 欧美一区二区三区久久久 | 日韩在线播放一区 | 亚洲欧洲视频在线观看 | 又亲又揉摸下面视频免费看 | 国产免费一区二区三区在线 | 伊人伊狠亚洲综合影院 | 欧美极品福利视频在线播放 | 日本www色视频成人免费免费 | 美女被网站免费看九色视频 | 国产一区视频在线免费观看 | 日本人爱爱视频 | 99热这里有免费国产精品 | 网址黄| 精品免费久久久久国产一区 | www.一级毛片 | 日韩中文字幕精品一区在线 | 日韩精品一区二区三区高清 | 日本a级特黄特黄刺激大片 日本a黄 | 麻豆国产高清精品国在线 | 免费jizz在线播放视频 | 日本黄色三级网站 | 国产一级做a爰片久久毛片男 | 国产精品正在播放 | 成人午夜免费视频毛片 | 国产身材极品喷水 在线播放 | 国产三级在线观看视频不卡 | 国产欧美在线观看 | 日韩精品第一页 | 色偷偷亚洲第一成人综合网址 | 在线500福利视频国产 | 在线成年人网站 | 一本一本久久a久久精品综合麻豆 | 九九草在线观看 | 日韩精品视频免费网址 | 黄色一级短视频 | 一级片aaa | 国产无限制自拍 |