Skip to content

Commit

Permalink
加入智能聊天机器人
Browse files Browse the repository at this point in the history
  • Loading branch information
wosojadfjgo committed Sep 2, 2019
1 parent 4c4beeb commit 662cbe3
Show file tree
Hide file tree
Showing 12 changed files with 350 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public class ConfigConstants {
public static final String PATH_MONO_TEA_HISTORY_DATE = "/module/monoTeaHistoryDate";
public static final String PATH_MONO_CATEGORY = "/module/monoCategory";
public static final String PATH_HITOKOTO = "/module/hitokoto";
public static final String PATH_SMART_ROBOT = "/module/smartRobot";
public static final String PATH_POETRY = "/module/poetry";
public static final String PATH_POETRY_SEARCH = "/module/poetrySearch";
public static final String PATH_POETRY_DETAIL = "/module/poetryDetail";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@
import java.util.Random;

import io.reactivex.Single;
import io.reactivex.SingleObserver;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.disposables.Disposable;

@Interceptor(priority = 5, name = "login")
public class LoginInterceptor implements IInterceptor {
Expand All @@ -34,18 +35,33 @@ public void process(Postcard postcard, InterceptorCallback callback) {
//主线程跳转登录页面(走绿色通道,不走拦截器)
Single.just(postcard)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Postcard>() {
.subscribe(new SingleObserver<Postcard>() {
@Override
public void accept(Postcard postcard) throws Exception {
String targetPath = postcard.getPath();
if (TextUtils.isEmpty(targetPath)) return;
Bundle bundle = postcard.getExtras();
bundle.putString(ConfigConstants.PATH_TARGET, targetPath);
public void onSubscribe(Disposable d) {
}

@Override
public void onSuccess(Postcard postcard) {
Bundle bundle = null;
if (null != postcard) {
String targetPath = postcard.getPath();
bundle = postcard.getExtras();
if (!TextUtils.isEmpty(targetPath)) {
if (!TextUtils.equals(ConfigConstants.PATH_LOGIN, targetPath)) {
bundle.putString(ConfigConstants.PATH_TARGET, targetPath);
}
}
}
ARouter.getInstance().build(ConfigConstants.PATH_LOGIN)
.with(bundle)
.greenChannel()
.navigation();
}

@Override
public void onError(Throwable e) {
e.printStackTrace();
}
});
callback.onInterrupt(null);
} else {//不需要登录
Expand Down
3 changes: 3 additions & 0 deletions module/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -43,5 +43,8 @@
<activity
android:name=".h5.X5WebViewActivity"
android:theme="@style/BaseAppTheme" />
<activity
android:name=".textword.view.SmartRobotActivity"
android:theme="@style/BaseAppTheme" />
</application>
</manifest>
3 changes: 3 additions & 0 deletions module/src/main/debug/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@
<activity
android:name=".h5.X5WebViewActivity"
android:theme="@style/BaseAppTheme" />
<activity
android:name=".textword.view.SmartRobotActivity"
android:theme="@style/BaseAppTheme" />
</application>

</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ private void initRecyclerView(RecyclerView recyclerView) {
ARouter.getInstance().build(ConfigConstants.PATH_POETRY).navigation();
break;
case 4://探索
ARouter.getInstance().build(ConfigConstants.PATH_SMART_ROBOT).navigation();
break;
case 5://音乐
ARouter.getInstance().build(ConfigConstants.PATH_H5).withString("h5Url", "https://ys.juan8014.cn/yin/").navigation();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.heyongrui.module.ModuleFragment;
import com.heyongrui.module.douban.presenter.DouBanPresenter;
import com.heyongrui.module.douban.view.DouBanActivity;
import com.heyongrui.module.textword.view.SmartRobotActivity;

import dagger.Component;

Expand All @@ -30,4 +31,6 @@ public interface ModuleComponent {
void inject(DouBanPresenter douBanPresenter);

void inject(ModuleFragment moduleFragment);

void inject(SmartRobotActivity smartRobotActivity);
}
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,11 @@ public interface TextApi {
*/
@GET("api/group/topicList.do")
Observable<PoemGroupDetailDto> groupDetail(@Query("groupId") String groupId, @Query("pageNo") int pageNo, @Query("pageSize") int pageSize);

/**
* 智能机器人(天气、翻译、藏头诗、笑话、歌词、计算、域名信息/备案/收录查询、IP查询、手机号码归属、人工智能聊天)
* {"result":0,"content":"内容"}
*/
@GET("api.php?key=free&appid=0")
Observable<Object> smartRobot(@Query("msg") String msg);
}
Original file line number Diff line number Diff line change
Expand Up @@ -101,4 +101,14 @@ public Observable<PoemGroupDetailDto> groupDetail(String groupId, int pageNo, in
.groupDetail(groupId, pageNo, pageSize)
.compose(RxHelper.rxSchedulerHelper());
}

/**
* 智能机器人(天气、翻译、藏头诗、笑话、歌词、计算、域名信息/备案/收录查询、IP查询、手机号码归属、人工智能聊天)
* {"result":0,"content":"内容"}
*/
public Observable<Object> smartRobot(String conversationContent) {
return ApiService.createApi(TextApi.class, "http://api.qingyunke.com/")
.smartRobot(conversationContent)
.compose(RxHelper.rxSchedulerHelper());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
package com.heyongrui.module.textword.view;

import android.graphics.Color;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

import com.alibaba.android.arouter.facade.annotation.Route;
import com.blankj.utilcode.util.KeyboardUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.heyongrui.base.assist.ConfigConstants;
import com.heyongrui.base.assist.RxManager;
import com.heyongrui.base.base.BaseActivity;
import com.heyongrui.base.utils.DrawableUtil;
import com.heyongrui.module.R;
import com.heyongrui.module.dagger.DaggerModuleComponent;
import com.heyongrui.module.dagger.ModuleModule;
import com.heyongrui.module.data.service.TextService;
import com.heyongrui.network.configure.ResponseDisposable;

import javax.inject.Inject;

@Route(path = ConfigConstants.PATH_SMART_ROBOT)
public class SmartRobotActivity extends BaseActivity implements View.OnClickListener {

private EditText etInput;
private TextView tvContent;
private ImageView ivClear;

@Inject
TextService mTextService;

RxManager mRxManager;

@Override
protected void initializeInjector() {
super.initializeInjector();
DaggerModuleComponent
.builder()
.appComponent(getAppComponent())
.moduleModule(new ModuleModule(this))
.build()
.inject(this);
}

@Override
public void onClick(View view) {
int id = view.getId();
if (id == R.id.iv_back) {
finish();
} else if (id == R.id.iv_clear) {
etInput.setText("");
} else if (id == R.id.btn_chat) {
KeyboardUtils.hideSoftInput(etInput);
String conversationContent = etInput.getText().toString();
if (!TextUtils.isEmpty(conversationContent)) {
chatWithSmartRobot(conversationContent);
}
}
}

@Override
protected int getLayoutId() {
return R.layout.activity_smart_robot;
}

@Override
protected void init(Bundle savedInstanceState) {
mRxManager = new RxManager();

ImageView ivBack = findViewById(R.id.iv_back);
ivBack.setImageDrawable(DrawableUtil.tintDrawable(this, R.drawable.ic_back, Color.WHITE));
etInput = findViewById(R.id.et_input);
ivClear = findViewById(R.id.iv_clear);
Button btnChat = findViewById(R.id.btn_chat);
tvContent = findViewById(R.id.tv_content);
tvContent.setMovementMethod(ScrollingMovementMethod.getInstance());

addOnClickListeners(this, ivBack, ivClear, btnChat);

initEdit(etInput);
}

private void initEdit(EditText editText) {
editText.setOnEditorActionListener((textView, i, keyEvent) -> {
if (i == EditorInfo.IME_ACTION_SEARCH) {
KeyboardUtils.hideSoftInput(editText);
String conversationContent = textView.getText().toString();
if (!TextUtils.isEmpty(conversationContent)) {
chatWithSmartRobot(conversationContent);
}
return true;
}
return false;
});
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}

@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}

@Override
public void afterTextChanged(Editable editable) {
String string = editable.toString();
if (TextUtils.isEmpty(string)) {
ivClear.setVisibility(View.GONE);
} else {
ivClear.setVisibility(View.VISIBLE);
}
}
});
}

private void chatWithSmartRobot(String conversationContent) {
mRxManager.add(mTextService.smartRobot(conversationContent)
.subscribeWith(new ResponseDisposable<Object>(this, true) {
@Override
protected void onSuccess(Object object) {
tvContent.setText("");
String resultString = new Gson().toJson(object);
if (!TextUtils.isEmpty(resultString)) {
JsonObject jsonObject = new JsonParser().parse(resultString).getAsJsonObject();
if (jsonObject != null) {
boolean isHasContent = jsonObject.has("content");
if (isHasContent) {
try {
String content = jsonObject.get("content").getAsString();
content = TextUtils.isEmpty(content) ? "" : content;
content = content.replace("{br}", "\n");
tvContent.setText(content);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}

@Override
protected void onFailure(int errorCode, String errorMsg) {
ToastUtils.showShort(errorMsg);
tvContent.setText("");
}
}));
}

@Override
protected void onDestroy() {
if (null != mRxManager) {
mRxManager.clear();
}
super.onDestroy();
}
}
Loading

0 comments on commit 662cbe3

Please sign in to comment.