android 聊天机器人

相关信息全写在代码中,很详细

一 、界面展示

做了图标适配 感觉还可以。。。emmm nice

二 、代码

遇到的坑也都在代码中做了解释,下面是我查阅的一些资料
demo下载地址:
https://download.csdn.net/download/qq_42733641/12026256

1、mainActivity.java

http://api.qingyunke.com/ 青云客聊天机器人API 也可以找其他的,但是要注册实名之类的
https://www.jianshu.com/p/4e8e4fd13cf7 ListView与AdapterView全面解析
https://blog.csdn.net/sinat_37064286/article/details/86537354 Java-IO流 数据在网络传输中的类型
https://blog.csdn.net/csxypr/article/details/92378336 String、StringBuffer和StringBuilder的区别

https://www.jianshu.com/p/da6af26b7483
https://blog.csdn.net/github_36217929/article/details/78435026 文字转语音 TextToSpeech类的简单使用
https://blog.csdn.net/lucasxu01/article/details/80764114 json踩坑

package cn.itcast.robot_alpha;import androidx.appcompat.app.AppCompatActivity;import android.annotation.SuppressLint;import android.content.Context;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.speech.tts.TextToSpeech;import android.speech.tts.TextToSpeech.OnInitListener;import android.speech.tts.UtteranceProgressListener;import android.util.Log;import android.view.View;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;import android.widget.SeekBar;import android.widget.TextView;import android.widget.Toast;import org.json.JSONException;import org.json.JSONObject;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.ArrayList;import java.util.List;import java.util.Locale;public class MainActivity extends AppCompatActivity {    private EditText editText;    private Button btText;    private ListView lvitem;    private Button btsetTts;    private SeekBar sbSpeedRate;    private SeekBar sbPitch;    public static String URL = "http://api.qingyunke.com/api.php?key=free&appid=0&msg="; //智能机器人API     //listview 适配器    private List list = new ArrayList<>();    ArrayAdapter adapter;    //文字转语音 TTS  使用原生 TextToSpeech    private TextToSpeech tts;    float SpeedRate = 1.0f;   //语速    float Pitch = 1.5f;       //音调    boolean flag = false; //0 关  1 开    //语音播报开关    //handler 接受子线程的消息并控制播报   语音播报不能放在子线程 会闪退    @SuppressLint("HandlerLeak")    private Handler handler = new Handler(){        public void handleMessage(Message msg){            if(msg.what == 1){                Log.d("接受 = ", "ok");                                //使用Bundle 携带信息                Bundle bundle = msg.getData();                String result = bundle.getString("msg");                                //语音播报开关标志 ,由按钮控制                if(flag == true){                    if(result == null){                        tts.speak("输入为空",TextToSpeech.QUEUE_FLUSH,null);                    }                                        //不能在子线程进行,会闪退                    tts.speak(result,TextToSpeech.QUEUE_FLUSH,null);                }            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //控件初始化        initview();        //listview的适配器 可以自定义 这里使用原生ArrayAdapetr        adapter = new ArrayAdapter(MainActivity.this,                R.layout.support_simple_spinner_dropdown_item,list);        list.add("欢迎回来,Alpha!");        //speek("欢迎回来,Alpha!");        lvitem.setAdapter(adapter);        //TextToSpeech 创建及监听        TextToSpeech.OnInitListener listener;        tts = new TextToSpeech(this, new OnInitListener() {            @Override            public void onInit(int i) {                //是否支持播报                if(i == TextToSpeech.SUCCESS){                    //是否支持中文播报 ,可以在手机设置搜“语音”,查看是否有中文库(有语音助手的一般都会有)                    int result = tts.setLanguage(Locale.CHINA);                    if(result != TextToSpeech.LANG_COUNTRY_AVAILABLE && result != TextToSpeech.LANG_AVAILABLE){                        Toast.makeText(MainActivity.this,"不支持中文",Toast.LENGTH_SHORT).show();                    }                }            }        });        tts.setSpeechRate(SpeedRate);  //设置语速        tts.setPitch(Pitch);            //设置语调        //监听  不用可删掉        tts.setOnUtteranceProgressListener(new UtteranceProgressListener(){            @Override            public void onStart(String s) {            }            @Override            public void onDone(String s) {            }            @Override            public void onError(String s) {            }        });    }    private void initview() {      //  textView = findViewById(R.id.tv_item);        editText = findViewById(R.id.ed_text);        btText = findViewById(R.id.bt_text);        lvitem = findViewById(R.id.lv_item);        btsetTts = findViewById(R.id.btsettts);        sbSpeedRate = findViewById(R.id.sb_SpeedRate);        sbPitch = findViewById(R.id.sb_Pitch);        //滑动条监听事件        sbPitch.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {             @Override             public void onProgressChanged(SeekBar seekBar, int i, boolean b) {                 //seekbar是id                 float Rate = (float)i/10;                 //Log.d("i = ", i+"");                 // Log.d("rate = ", Rate+"");                 tts.setPitch(Rate);   //设置音调             }             @Override             public void onStartTrackingTouch(SeekBar seekBar) {             }             @Override             public void onStopTrackingTouch(SeekBar seekBar) {             }         });        sbSpeedRate.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {            @Override            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {                //seekbar是id                float Rate = (float)i/10;                //Log.d("i = ", i+"");               // Log.d("rate = ", Rate+"");                tts.setSpeechRate(Rate);   //设置音速            }            @Override            public void onStartTrackingTouch(SeekBar seekBar) {            }            @Override            public void onStopTrackingTouch(SeekBar seekBar) {            }        });        //语音播报控制按钮        btsetTts.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                btsetTts.setText("关闭语音");                flag = !flag;                if(flag == true){                    Toast.makeText(MainActivity.this,"语音已打开",Toast.LENGTH_SHORT).show();                }else                    Toast.makeText(MainActivity.this,"语音已关闭",Toast.LENGTH_SHORT).show();            }        });        //向API接口发送消息        btText.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                //tts.speak("哈哈哈哈哈哈哈",TextToSpeech.QUEUE_FLUSH,null);                sendMsg();            }        });    }    public void sendMsg(){        String msg;        msg = editText.getText().toString();       // textView.setText(msg+"\n");        list.add("Alpha: "+msg);        adapter.notifyDataSetChanged();   //更新ListView        doget(msg);    }    //接受消息并发送    public  void doget(final String msg){        new Thread(new Runnable(){            @Override            public void run() {                String url = URL+msg;  //拼接消息  使用get方式发送                BufferedReader reader = null;                HttpURLConnection connection = null;                String result;                try {                    //连接                    java.net.URL con = new URL(url);                    connection = (HttpURLConnection) con.openConnection();                    connection.setRequestMethod("GET");                    connection.setConnectTimeout(5000);                    connection.setReadTimeout(5000);                    //获取返回的数据  接收到的时json字符串                    InputStream inputStream = connection.getInputStream();                    reader = new BufferedReader(new InputStreamReader(inputStream));                    //可变字符串对象,线程不安全,性能略高                    StringBuilder builder = new StringBuilder();                    String line = null;                    while ((line = reader.readLine()) != null) {                        builder.append(line);                    }                    result = builder.toString();                    //更新UI                    updateUI(parseJson(result));                    Log.d("返回 = ", result);                } catch (MalformedURLException e) {                    e.printStackTrace();                } catch (IOException e) {                    e.printStackTrace();                } finally {                    if (connection != null) {                        connection.disconnect();                        if (reader != null) {                            try {                                reader.close();                            } catch (IOException e) {                                e.printStackTrace();                            }                        }                    }                }            }        }).start();    }    private void updateUI(final String result) {        runOnUiThread(new Runnable(){            @Override            public void run() {               // textView.append(result);                list.add("blibli: "+result);                adapter.notifyDataSetChanged();//接受到返回数据就刷新界面                //handler 将数据传递出去 使用Bundle携带数据                Message message = new Message();                message.what = 1;                Bundle bundle = new Bundle();                bundle.putString("msg",result);                message.setData(bundle);                handler.sendMessage(message);            }        });    }    //json数据处理    private static String parseJson(String date) {        String result = null;        try {                    JSONObject jsonObject = new JSONObject(date);            result = jsonObject.getString( "content");            Log.d("处理 = ", result);        } catch (JSONException ex) {            ex.printStackTrace();        }            return result;    }    @Override    protected void onStop() {        super.onStop();        tts.stop(); // 不管是否正在朗读TTS都被打断        tts.shutdown();  //释放资源    }}
2.activity_main.xml
<?xml version="1.0" encoding="utf-8"?>            

更多相关文章

  1. 箭头函数的基础使用
  2. NPM 和webpack 的基础使用
  3. Python list sort方法的具体使用
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. android 使用html5作布局文件: webview跟javascript交互
  6. Android(安卓)Resource介绍和使用
  7. "Failed to fetch URL https://dl-ssl.google.com/android/repos
  8. 使用NetBeans搭建Android开发环境
  9. android 零星调试笔记

随机推荐

  1. Android(安卓)SeekBar显示进度在thumb上
  2. Android仿微信聊天语言点击喇叭动画效果
  3. Windows下安装Android(安卓)Studio
  4. Android(安卓)禁止屏幕旋转
  5. Android监听网络状态实现(BroadcastRecei
  6. Android排序数组的简单方法
  7. Android原生SQLite操作以及greenDao框架
  8. Android(安卓)-- Environment类
  9. android listview 中使用EditText 防止数
  10. 友盟统计 集成测试看不到实时日志