-
and_181210Android 2018. 12. 10. 21:27
코틀린
챗봇
dialogflow 챗봇
https://dialogflow.com/
ConstraintLayout
??는 널 허용
MyRecyclerViewAdapter.kt
package com.chatbot.msi.chatbot
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
data class MessageDTO(var myMessage:Boolean? = null , var message: String ? = null)
class MyRecyclerViewAdapter(messageDTOs:ArrayList<MessageDTO>):RecyclerView.Adapter<RecyclerView.ViewHolder>() {
var messageDTOs = messageDTOs
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
var view = LayoutInflater.from(parent.context).inflate(R.layout.item_comment, parent,false)
return CustomViewHolder(view)
}
class CustomViewHolder(view: View) : RecyclerView.ViewHolder(view) {
}
override fun getItemCount(): Int {
}
override fun onBindViewHolder(p0: RecyclerView.ViewHolder, p1: Int) {
}
}item_comment.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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="wrap_content">
<TextView
android:id="@+id/left_textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/leftbubble"
android:text="TextView"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/right_textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:background="@drawable/rightbubble"
android:text="TextView"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
</android.support.constraint.ConstraintLayout>mainActivity.kt
package com.chatbot.msi.chatbot
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v7.widget.LinearLayoutManager
import android.text.TextUtils
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
recyclerview.layoutManager = LinearLayoutManager(this)
button.setOnClickListener{
if(!TextUtils.isEmpty((editText.text))){
recyclerview.adapter?.notifyDataSetChanged()
//recyclerview.smoothScrollToPosition()
//? 널 허용 !! 은 널 허용치 않음
}
}
}
}main xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
tools:context=".MainActivity"
tools:layout_editor_absoluteY="25dp">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="0dp"
android:layout_height="58dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toTopOf="@+id/recyclerview"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/logo_title"/>
</android.support.v7.widget.Toolbar>
<EditText
android:id="@+id/editText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="31dp"
android:layout_marginEnd="33dp"
android:layout_marginBottom="16dp"
android:ems="10"
android:inputType="textPersonName"
android:text="Name"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/button"
app:layout_constraintStart_toStartOf="parent"/>
<Button
android:id="@+id/button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="15dp"
android:layout_marginBottom="16dp"
android:background="@android:color/holo_purple"
android:text="보내기"
android:textColor="@android:color/background_light"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/editText"
app:layout_constraintTop_toBottomOf="@+id/recyclerview"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="9dp"
app:layout_constraintBottom_toTopOf="@+id/button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar"/>
</android.support.constraint.ConstraintLayout>drawable
package com.chatbot.msi.chatbot
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import kotlinx.android.synthetic.main.item_comment.view.*
data class MessageDTO(var myMessage:Boolean? = null , var message: String ? = null)
class MyRecyclerViewAdapter(messageDTOs:ArrayList<MessageDTO>):RecyclerView.Adapter<RecyclerView.ViewHolder>() {
var messageDTOs = messageDTOs
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
var view = LayoutInflater.from(parent.context).inflate(R.layout.item_comment, parent,false)
return CustomViewHolder(view)
}
class CustomViewHolder(view: View) : RecyclerView.ViewHolder(view) {
}
override fun getItemCount(): Int {
return messageDTOs.size
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if(messageDTOs[position].myMessage!!){
holder.itemView.right_textView.visibility = View.VISIBLE
holder.itemView.right_textView.text = messageDTOs[position].message
holder.itemView.left_textView.visibility = View.INVISIBLE
}else{
holder.itemView.left_textView.visibility = View.VISIBLE
holder.itemView.left_textView.text = messageDTOs[position].message
holder.itemView.right_textView.visibility = View.INVISIBLE
}
}
}뉴 에이전트 하고 세이브하고 톱니바퀴로 설정하고 키를 가저온다
그레이들 디펜던시추가
compile 'ai.api:libai:1.6.12'
매니패스트에 유즈 퍼미션 인터넷 추가
메인 코틀린
package com.chatbot.msi.chatbot
import ai.api.AIConfiguration
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v7.widget.LinearLayoutManager
import android.text.TextUtils
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
var messageDTOs = arrayListOf<MessageDTO>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
recyclerview.layoutManager = LinearLayoutManager(this)
var config = AIConfiguration("AI 쳇봇 키 ")
button.setOnClickListener{
if(!TextUtils.isEmpty((editText.text))){
recyclerview.adapter?.notifyDataSetChanged()
recyclerview.smoothScrollToPosition(messageDTOs.size - 1)
//? 널 허용 !! 은 널 허용치 않음
editText.setText("")
}
}
}
}package com.chatbot.msi.chatbot
import ai.api.AIConfiguration
import ai.api.AIDataService
import ai.api.model.AIRequest
import ai.api.model.Result
import android.os.AsyncTask
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v7.widget.LinearLayoutManager
import android.text.TextUtils
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
var messageDTOs = arrayListOf<MessageDTO>()
var aiDataService : AIDataService? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
recyclerview.layoutManager = LinearLayoutManager(this)
var config = AIConfiguration("701ec592f1d84fbaae84325cb65b620e", AIConfiguration.SupportedLanguages.English)
aiDataService = AIDataService(config)
button.setOnClickListener{
if(!TextUtils.isEmpty((editText.text))){
recyclerview.adapter?.notifyDataSetChanged()
recyclerview.smoothScrollToPosition(messageDTOs.size - 1)
TalkAsyncTask()
editText.setText("")
}
}
}//oncreate end
inner class TalkAsyncTask : AsyncTask<String,Void,Result>(){
override fun doInBackground(vararg params: String?): Result? {
var aiRquest = AIRequest()
aiRquest.setQuery(params[0])
return aiDataService?.request(aiRquest)?.result
}
override fun onPostExecute(result: Result?) {
if(result != null){
println(result.fulfillment.speech)
}
}
}
}package com.chatbot.msi.chatbot
import ai.api.AIConfiguration
import ai.api.AIDataService
import ai.api.model.AIRequest
import ai.api.model.Result
import android.os.AsyncTask
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v7.widget.LinearLayoutManager
import android.text.TextUtils
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
var messageDTOs = arrayListOf<MessageDTO>()
var aiDataService : AIDataService? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
recyclerview.layoutManager = LinearLayoutManager(this)
var config = AIConfiguration("701ec592f1d84fbaae84325cb65b620e", AIConfiguration.SupportedLanguages.English)
aiDataService = AIDataService(config)
button.setOnClickListener{
if(!TextUtils.isEmpty(editText.text)){
recyclerview.adapter?.notifyDataSetChanged()
recyclerview.smoothScrollToPosition(messageDTOs.size - 1)
TalkAsyncTask().execute(editText.text.toString())
editText.setText("")
}
}
}//oncreate end
inner class TalkAsyncTask : AsyncTask<String,Void,Result>(){
override fun doInBackground(vararg params: String?): Result? {
var aiRquest = AIRequest()
aiRquest.setQuery(params[0])
return aiDataService?.request(aiRquest)?.result
}
override fun onPostExecute(result: Result?) {
if(result != null){
// println(result.fulfillment.speech)
makeMessage(result)
}
}
fun makeMessage(result: Result){
var speech = result.fulfillment.speech
messageDTOs.add(MessageDTO(false,speech))
recyclerview.adapter?.notifyDataSetChanged()
recyclerview.smoothScrollToPosition(messageDTOs.size-1)
}
}
}'Android' 카테고리의 다른 글
and_181207 (0) 2018.12.07 and_181204 (0) 2018.12.04 And_181203 아이오닉+앵귤러JS 세팅 (0) 2018.12.03 and_181130 (0) 2018.11.30 And_181128 (0) 2018.11.28