java - Android - 使用 java 对象转换 API JSON 结果以设置不同的设计
问题描述
我不擅长使用 API,所以我很难通过实践来学习,对于当前的项目,我使用的是 Watson API,它以 JSON 格式显示结果,如下所示。API 根据用户的文本输入生成结果,生成的结果可能有一个或多个基于句子的“音调”。我把它放在一个文本视图中以显示结果。
谁能告诉我如何为“tone_name”和“score”设置不同的字体颜色?我不确定如何将其拆分为 2 个文本视图,因为 JSON 结果是在结构中生成的。如何分离色调以设置不同的颜色或其他设计,但仍保持相同的结果结构?
这就是我获得 API 结果的方式,它显示了一个音调列表和生成的每个音调的分数:
ToneAnalysis toneAnalysis = toneAnalyzer.tone(toneOptions).execute().getResult();
List<ToneScore> documentToneScores = toneAnalysis.getDocumentTone().getTones();
String detectedTones = "";
for (ToneScore score : documentToneScores) {
if (score.getScore() > 0.5f) {
detectedTones += score.getToneName() + " \n" + score.getScore() + "\n\n";
}
}
现在结果看起来像这样,因为它显示在单个文本视图中:
我想把它改成这样?区分音调和乐谱?
JSON结果格式:
{
"document_tone": {
"tones": [
{
"score": 0.6165,
"tone_id": "sadness",
"tone_name": "Sadness"
},
{
"score": 0.829888,
"tone_id": "analytical",
"tone_name": "Analytical"
}
]
}
xml:
<LinearLayout 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"
android:orientation="vertical"
tools:context=".Main2Activity">
<TextView
android:id="@+id/textmain2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="30dp"
android:fontFamily="@font/droid_sans"
android:text="result"
android:textColor="#000"
android:textSize="18sp" />
</LinearLayout>
提前谢谢你。
添加了一个 POJO 类,但我仍然不确定如何将其连接到结果 :(
public class Tones {
private String tones;
private Double score;
public String getTones() {
return tones;
}
public void setTones(String tones) {
this.tones = tones;
}
public Double getScore() {
return score;
}
public void setScore(Double score) {
this.score = score;
}
public Tones(String tones, Double score) {
this.tones = tones;
this.score = score;
}
public Tones() {
}
}
解决方案
您应该使用一个对象来存储要在屏幕上显示的值。目前你把 all in String detectedTones
,但你可以创建一个 POJO 或 Kotlindata class
来表示它,例如:
data class DetectedTones(val name: String, val score: Double)
然后在 XML 布局中创建两个TextView
s - 一个用于 name,另一个用于 score,并在那里设置值。您也可以使用ToneScore
该类,但通常应用程序将获取和显示逻辑分开。如果您想分离逻辑(我认为您的情况不需要它),那么您可以使用映射器(具有静态DetectedTones map(input: ToneScore)
方法的新类)将一个类映射到另一个类。
在您的设置中,如果您只是将TextView
s 放入 XML 布局中,那么您需要提前知道列表中有多少个值。通常你事先并不知道它,然后在Android
我们RecyclerView
用来显示列表数据。有关更多信息,请参阅 RecyclerView 教程。例如:简单的 Android RecyclerView 示例
在 RecyclerView 的每一行中,您都会有一个定义该行的 XML。在那里你会有 2 TextViews
。在 RecyclerView 适配器中,您将编写一个代码,获取列表中的每个项目并将 thename
和 the设置score
为 these TextViews
。
推荐阅读
- c# - 如何在对话中处理是/否
- html - 如何更改实现 css sidenav 断点
- typescript - 关于 TypeScript 的展示有什么建议吗?
- python - Python 3.X:在嵌套 For 循环中调用外部变量
- javascript - 如何通过 node.js server-sent-event 发送命令行输出并在浏览器中显示
- java - Java 函数返回 int 而不是 Integer
- c# - 在 .Net-Core 中使用 JWT 和 OAuth 身份验证
- python - Anaconda:当我升级 Jupyter 时,当我知道存在超过 5.x 版的稳定版本时,它会给我 4.4.0 版
- model-view-controller - 没有“IEnumerable”类型的 ViewData 项
' 具有键 'Dept_IDs' - ruby - capybara save_screenshot 设置屏幕截图大小的可用选项