首页 > 解决方案 > 如何在 Android 应用程序中集成对话框流

问题描述

我想将我的聊天机器人(由 dialogflow 创建)集成到我的应用程序中,并且我已经创建了 xml 文件,但我没有找到如何在它们之间进行匹配的方法。我已经有使用房间库持久性的数据库。而且,我正在使用 Java 进行编码。

如何将代理集成到我的应用程序中?以及如何为我的聊天消息添加 recylerViewAdapter。谢谢

msg_list.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<TextView
    android:id="@+id/leftText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:layout_alignParentStart="true"
    android:text="Hello this is me!!"
    android:padding="8dp"
    android:textColor="#212121"
    android:background="@drawable/left_background"
    android:elevation="2dp"
    android:layout_alignParentLeft="true" />


  <TextView
    android:id="@+id/rightText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:layout_alignParentEnd="true"
    android:text="Hi!! How are you!!"
    android:background="@drawable/right_background"
    android:textColor="#fff"
    android:padding="8dp"
    android:elevation="2dp"
    android:layout_alignParentRight="true" />


   </RelativeLayout>

聊天机器人.xml

 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout
    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=".Chatbot">


    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingTop="10dp"
        android:paddingBottom="50dp"
        android:clipToPadding="false"
        android:background="#f4f6f7"
        tools:listitem="@layout/msglist"
        />


    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true">


        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="10dp"
            android:layout_marginEnd="5dp"
            android:layout_marginBottom="10dp"
            android:elevation="2dp"
            android:layout_toStartOf="@+id/addBtn"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="5dp"
            android:layout_toLeftOf="@+id/addBtn">

            <EditText
                android:id="@+id/message"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="20dp"
                android:layout_marginEnd="20dp"
                android:background="#fff"
                android:hint="Type a Message"
                android:minHeight="50dp"
                android:textSize="18sp" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/addBtn"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_alignParentEnd="true"
            android:background="@drawable/back_fab"
            android:layout_marginBottom="10dp"
            android:layout_marginEnd="5dp"
            android:elevation="4dp"
            android:layout_centerInParent="true"
            android:layout_alignParentRight="true"
            android:layout_marginRight="5dp">
            <ImageView
                android:id="@+id/fab_img"
                android:layout_width="25dp"
                android:layout_height="25dp"
                android:layout_centerInParent="true"
                android:src="@drawable/ic_send_white_24dp"
                android:tint="#fff"/>
        </RelativeLayout>

    </RelativeLayout>

    </RelativeLayout>

聊天机器人活动

public class Chatbot extends AppCompatActivity implements AIListener {
RecyclerView recyclerView;
EditText message;
RelativeLayout addBtn;
ChatbotAdapter adapter;
Boolean flagFab = true;
private AIService aiService;
private AIServiceContext customAIServiceContext;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_chatbot);

    recyclerView = (RecyclerView)findViewById(R.id.recyclerView);
    message = (EditText)findViewById(R.id.message);
    addBtn = (RelativeLayout)findViewById(R.id.addBtn);

    recyclerView.setHasFixedSize(true);
    final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
    linearLayoutManager.setStackFromEnd(true);
    recyclerView.setLayoutManager(linearLayoutManager);



    addBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            String msg = message.getText().toString().trim();

            if (!message.equals("")) {

                ChatMessage chatMessage = new ChatMessage(msg, "user");

            }

            message.setText("");

        }
    });


         adapter = new ChatbotAdapter();


    recyclerView.setAdapter(adapter);

    final AIConfiguration config = new AIConfiguration("Acces", 
     AIConfiguration.SupportedLanguages.French,
            AIConfiguration.RecognitionEngine.System);

    aiService = AIService.getService(this, config);
    customAIServiceContext = AIServiceContextBuilder.buildFromSessionId("ID");
    aiService.setListener(this);

    final AIDataService aiDataService = new AIDataService(config);

    final AIRequest aiRequest = new AIRequest();
    addBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            String msg = message.getText().toString().trim();

            if (!msg.equals("")) {

                aiRequest.setQuery(msg);
                new AsyncTask<AIRequest,Void, AIResponse>(){

                    @Override
                    protected AIResponse doInBackground(AIRequest... aiRequests) {
                        final AIRequest request = aiRequests[0];
                        try {
                            final AIResponse response = 
                       aiDataService.request(aiRequest);
                            return response;
                        } catch (AIServiceException e) {
                        }
                        return null;
                    }
                    @Override
                    protected void onPostExecute(AIResponse response) {
                        if (response != null) {

                            Result result = response.getResult();
                            String reply = result.getFulfillment().getSpeech();
                        }
                    }
                }.execute(aiRequest);
            }
            else {
                aiService.startListening();
            }

            message.setText("");

        }
    });

}

@Override
public void onResult(AIResponse response) {

}

@Override
public void onError(AIError error) {

}

@Override
public void onAudioLevel(float level) {

}

@Override
public void onListeningStarted() {

}

@Override
public void onListeningCanceled() {

}

@Override
public void onListeningFinished() {
 }
}

聊天信息

public class ChatMessage {

private String msgText;
private String msgUser;



public ChatMessage(String msgText, String msgUser){
    this.msgText = msgText;
    this.msgUser = msgUser;

}


public ChatMessage(){

}

//+getter & setter
}

ChatbotAdapter //这个类不知道怎么编码

 public class ChatbotAdapter  extends RecyclerView.Adapter<ChatbotAdapter.ChatHolder> 
 {
@NonNull
@Override
public ChatHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View itemView = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.msglist, viewGroup, false);
    return new ChatHolder(itemView);
}

@Override
public void onBindViewHolder(@NonNull ChatHolder chatHolder, int i) {
}

@Override
public int getItemCount() {
    return 0;
}

public class ChatHolder extends RecyclerView.ViewHolder {
    TextView leftText, rightText;

    public ChatHolder(View itemView) {
        super(itemView);

        leftText = (TextView) itemView.findViewById(R.id.leftText);
        rightText = (TextView) itemView.findViewById(R.id.rightText);
    }
}
  }

标签: androiddialogflow-esandroid-recyclerview

解决方案


Your question is not that clear. Please add some more details like what is you want, what you have implemented and what issue is coming.

You may also try my implementation. I am not using Recycler view in my implementation, but you could follow the following article I wrote for integrating Dialogflow with Android. Try an follow the V2 version as V1 will phase out by October this year.

Also, Do not use fragment for Chatbot as it somehow does not work. Try and make a simple chatbot using my implementation and then you can work towards your own implementation. Hope it works.


推荐阅读