跳到主要内容
版本:v3

Android

1 需要提供给我们的信息

应用ID applicationId, 例如 com.example.test

应用签名 (32个字符) 应用签名的MD5值 例如 4056245dffxxxxxxxxxxxx

2 获取配置信息

提供以上信息后,我们会按照这个信息,提供token, 并提供一个aar文件,请将这个文件放置于和app文件夹同级的libs文件夹。并在appbuild.gradledependencies中增加如下配置:

    implementation fileTree(include: ['*.aar'], dir: 'libs') 

implementation(platform("com.squareup.okhttp3:okhttp-bom:4.11.0"))
implementation("com.squareup.okhttp3:logging-interceptor")
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4'

implementation files('libs/judianopenapi-版本号.aar')
implementation('com.jdapi:jd-android-sdk-auth:版本号@aar') // 聚典授权工具库
注意

使用SDK文件自带的demo直接测试前,请先:

  1. 确保签名一致性

    1.1. 如您只有一个签名的情况下,请将app模块下的debug签名和release签名设置为release签名以方便测试

    1.2. 如您有多个的签名情况下,请将app模块下的签名分别配置好相关信息

  2. 修改app的build.gradle文件中的applicationId

  3. 修改gradle.propertieS中的KEY_STORE_FILE(您app密钥路径)、KEY_STORE_PASSWORD、KEY_ALIAS、KEY_PASSWORD

  4. 修政sdkInit中的参数为您的token

3 代码编写

初始化

JuDianSearchManager.sdkInit("填入您的token",context)

获取书籍列表

返回结果中的fields对象中的数据,可作为按功能查询的可选配置项,例如:shiwen.danzi(释文-单字),shufa(书法),shici(诗词),传参格式:用逗号,隔开 查询结果的XML是加密数据,需下载字体再进行渲染

        JuDianSearchManager.sdkGetBooks(object : WordSearchInfoCallback {
override fun onSuccess(contentBean: WordSearchContentInfoBean) {
println("onSuccess: 书籍列表结果: ${contentBean.code} ${contentBean.body}")
}

override fun onFailed(errorCode: Int, message: String) {
Log.e("onFailed", "$errorCode:$message")
}
})

按功能查询

查询结果的XML是加密数据,需下载字体再进行渲染

       // ======== modulesParams 参数:功能可选配置  ============
// 用,隔开 例:shiwen.danzi,shiwen.baike,shici(从书籍列表接口返回的结果 bookListBean.fields中获取key,作为自定义功能的参数)
// 不指定模块查询,传入 "" 默认查所有功能
JuDianSearchManager.sdkGetWordInfoByModules(editQuery.text.toString().trim(),
object : WordSearchInfoCallback {
override fun onSuccess(contentBean: WordSearchContentInfoBean) {
println("onSuccess: 按功能查询结果: ${contentBean.code} ${contentBean.body}")
}

override fun onFailed(errorCode: Int, message: String) {
Log.e("onFailed", "$errorCode:$message")
}
},modulesParams)

按书籍查询

查询结果的XML是加密数据,需下载字体再进行渲染

      // ========  从书籍查询 ============
// bookId:指定书籍查找词条直接传入bookId如:"98",指定多本书籍如:"98,3" 用,隔开;(书籍id从书籍列表接口中获取)
// 不指定书籍查询,传入 "" 默认全局查找
JuDianSearchManager.sdkGetWordByBook(editQuery.text.toString().trim(),
object : WordSearchInfoCallback {
override fun onSuccess(contentBean: WordSearchContentInfoBean) {
println("onSuccess: 按书籍查询结果: ${contentBean.code} ${contentBean.body}")
}

override fun onFailed(errorCode: Int, message: String) {
Log.e("onFailed", "$errorCode:$message")
}
}, "98,3"
)

根据词头模糊搜索

            /**
* 根据词头模糊搜索
*
* @param text 要搜索的字/词
* @param size 页的大小
* @param page 页码
* @param bookIds 需要搜索的书籍,为空搜索全部有权限的书籍
* @param callback 返回查询结果
*/
JuDianSearchManager.sdkGetExplainInHeadword( editFuzzyQuery.text.toString().trim(),20,0,"118",object :
WordSearchInfoCallback {
override fun onSuccess(contentBean: WordSearchContentInfoBean) {
println("onSuccess: 词头模糊搜索结果: ${contentBean.code} ${contentBean.body}")
}

override fun onFailed(errorCode: Int, message: String) {
Log.e("onFailed", "$errorCode:$message")
}
})

}

模糊搜索释文

            /**
* 模糊搜索释文
*
* @param text 要搜索的字/词
* @param size 页的大小
* @param page 页码
* @param bookIds 需要搜索的书籍,为空搜索全部有权限的书籍
* @param callback 返回查询结果
*/
JuDianSearchManager.sdkGetExplainInExplain( editFuzzyQuery.text.toString().trim(),20,0,"118",object :
WordSearchInfoCallback {
override fun onSuccess(contentBean: WordSearchContentInfoBean) {
println("onSuccess: 模糊搜索释文结果: ${contentBean.code} ${contentBean.body}")
}

override fun onFailed(errorCode: Int, message: String) {
Log.e("onFailed", "$errorCode:$message")
}
})

}

全文模糊搜索

            /**
* 全文模糊搜索
*
* @param text 要搜索的字/词
* @param size 页的大小
* @param page 页码
* @param bookIds 需要搜索的书籍,为空搜索全部有权限的书籍
* @param callback 返回查询结果
*/
JuDianSearchManager.sdkGetExplainInFuzzy( editFuzzyQuery.text.toString().trim(),20,0,"118",object :
WordSearchInfoCallback {
override fun onSuccess(contentBean: WordSearchContentInfoBean) {
println("onSuccess: 全文模糊搜索结果: ${contentBean.code} ${contentBean.body}")
}

override fun onFailed(errorCode: Int, message: String) {
Log.e("onFailed", "$errorCode:$message")
}
})

}

弹框查询

使用示例:搜索‘中’一字,offsetY为显示框Y轴位置,maxHeight为显示框最大高度

         /**
* 查词SDK弹框方法
* @param activity 页面Activity
* @param text 查询的文本
* @param offsetY 距离屏幕左上角的Y轴偏移量
* @param maxHeight 弹框最大高度
*/
JuDianSearchManager.sdkTextSearchDialog(this@MainActivity, editQuery.text.toString().trim(), 550, 800)

查询结果数据下载字体

  downLoadFont(fontUrl)

/**
* 下载字体
* @param url
*/
private fun downLoadFont(url: String) {
// DownloadUtil 下载工具类Demo提供
DownloadUtil.get()!!.download(
url,
getRootExternalFilesDirs(this)!!.absolutePath,
"abc.tff",
object : DownloadUtil.OnDownloadListener {
override fun onDownloadSuccess(file: File?) {
Log.v("TAG", "下载成功啦")
Log.v("TAG ", file!!.absolutePath)
tf = Typeface.createFromFile(file)
if (file.absolutePath != null) {
filePath = file.absolutePath
}

// 渲染XML内容
showXMLWordContent()
}

override fun onDownloading(progress: Int) {
// Log.v("TAG", "下载进度" + progress);
}

override fun onDownloadFailed(e: Exception?) {}
})
}

private fun getRootExternalFilesDirs(context: Context): File? {
val files = ContextCompat.getExternalFilesDirs(context, null)
return if (files.isEmpty()) {
null
} else files[0]
}

XML数据渲染

     /**
* 展示xml
*/
private fun showXMLWordContent() {
var xmParselStr: String? = ""
resultContentBean?.data?.shiwen?.danzi?.let {
// 单字 ParseXmlUtil工具类Demo中有提供
xmParselStr = ParseXmlUtil.getInstance().setWordXmlContent(it, filePath)
}

xmParselStr?.let {
setContent(xmParselStr!!)
}

}



private fun setContent(xmParselStr:String) {
object : AsyncTask<String?, String?, SpannableStringBuilder>() {
override fun doInBackground(vararg p0: String?): SpannableStringBuilder? {
return TextRegexUtils.getSpannableStringBuilder(
this@MainActivity,
xmParselStr,
"",
"",
tf
)
}

override fun onPostExecute(spannableStringBuilder: SpannableStringBuilder) {
super.onPostExecute(spannableStringBuilder)
Log.d("abc ", spannableStringBuilder.toString())
tvXmlContent.typeface = tf
tvXmlContent.text = spannableStringBuilder
tvXmlContent.requestLayout()
}


}.execute()
}

其他功能查询

    /**
* 历史纪年
*/
EPOCH,
/**
* 古今地名
*/
PLACE_NAME,
/**
* 英译中
*/
ENGLISH
/**
* 中译英
*/
CHINESE_ENGLISH



searchWithType(editText.getText().toString().trim(), "ENGLISH", "");

/**
* 根据类型请求结果
* @param word
* @param type
* @param params , 使用,分隔 (如bookId)
*/
private fun searchWithType(word:String ,type:String, params:String ) {

JuDianSearchManager.sdkGetWordSearchType(this, word,
object : WordSearchInfoCallback {
override fun onSuccess(contentBean: WordSearchContentInfoBean) {
println("onSuccess: 查询结果: ${contentBean.code} ${contentBean.body}")
}

override fun onFailed(errorCode: Int, message: String) {
Log.e("onFailed", "$errorCode:$message")
}
}, type,params)

}

4 错误码说明

SDK返回错误

errorCode: -1001 请求接口超时

errorCode: -1002 网络异常

errorCode: -1003 证书异常,检查本地系统时间

errorCode: -1004 权限不正确,请检查SDK token是否正确

errorCode: -1009 其他错误

服务器返回错误

服务器返回的错误说明