Compare commits

..

No commits in common. 'main' and 'guoziyang_branch' have entirely different histories.

@ -85,7 +85,6 @@ public class TranslationService {
// 发送异步请求
mClient.newCall(request).enqueue(new Callback() {
@Override
// 若处理失败了,则回调
public void onFailure(@NonNull Call call, @NonNull IOException e) {
Log.e(TAG, "翻译请求失败,剩余重试次数: " + remainingRetries, e);
@ -94,13 +93,11 @@ public class TranslationService {
mMainHandler.postDelayed(() ->
translateWithRetry(text, sourceLang, targetLang, callback, remainingRetries - 1), 500);
} else {
// 回调失败的信息
postFailure(callback, "网络错误: " + e.getMessage());
}
}
@Override
// 处理成功的情况对HTTP的状态码进行校验读取响应体并返回日志
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
try {
if (!response.isSuccessful()) {
@ -119,7 +116,7 @@ public class TranslationService {
String errorMsg = "翻译API错误: " + translationResponse.getError_code() +
" - " + translationResponse.getError_msg();
// 特定错误码处理( 52001表示超时)
// 特定错误码处理
if (translationResponse.getError_code().equals("52001")) {
// 请求超时,可重试
if (remainingRetries > 0) {
@ -132,14 +129,14 @@ public class TranslationService {
postFailure(callback, errorMsg);
return;
}
// 提取翻译结果,对多个翻译项进行拼接
// 提取翻译结果
if (translationResponse.getTrans_result() != null &&
translationResponse.getTrans_result().length > 0) {
StringBuilder result = new StringBuilder();
for (TranslationResponse.TransResult item : translationResponse.getTrans_result()) {
result.append(item.getDst());
}
// 拼接成功后调用postSuccess
postSuccess(callback, result.toString());
} else {
postFailure(callback, "未获取到翻译结果");
@ -185,7 +182,6 @@ public class TranslationService {
// 翻译回调接口
public interface TranslationCallback {
//
void onSuccess(String translatedText);
void onFailure(String errorMessage);
}

@ -169,19 +169,16 @@ public class NoteEditActivity extends Activity implements OnClickListener,
super.onCreate(savedInstanceState);
this.setContentView(R.layout.note_edit);
mContentEditText = findViewById(R.id.note_edit_view);
Button translateButton = findViewById(R.id.btn_translate);
mTranslationService = new TranslationService(this);
if (savedInstanceState == null && !initActivityState(getIntent())) {
finish();
return;
}
initResources();
// 初始化编辑文本框
mContentEditText = findViewById(R.id.note_edit_view);
// 初始化翻译按钮
Button translateButton = findViewById(R.id.btn_translate);
// 创建翻译服务实例,这个服务是与翻译 API(TranslationService类) 进行交互。
mTranslationService = new TranslationService(this);
// 设置翻译按钮点击事件
translateButton.setOnClickListener(new View.OnClickListener() {
@Override
@ -192,9 +189,8 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
// 显示翻译对话框
private void showTranslationDialog() {
//获取编辑框中的文本并去除首尾空格
String text = mContentEditText.getText().toString().trim();
if (text.isEmpty()) {// 如果文本为空,则提示用户并返回
if (text.isEmpty()) {
Toast.makeText(this, "请输入需要翻译的内容", Toast.LENGTH_SHORT).show();
return;
}
@ -202,16 +198,14 @@ public class NoteEditActivity extends Activity implements OnClickListener,
// 创建语言选择对话框
final String[] languages = {"中文", "英语", "日语", "韩语", "法语", "西班牙语"};
final String[] languageCodes = {"zh", "en", "jp", "kor", "fra", "spa"};
final int[] selectedFromIndex = {0}; // 默认中文
final int[] selectedToIndex = {1}; // 默认英语
final int[] selectedFromIndex = {1}; // 默认中文
final int[] selectedToIndex = {0}; // 默认英语
// 创建一个AlertDiaLog构建器
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("选择翻译语言");
// 创建语言选择视图
View dialogView = getLayoutInflater().inflate(R.layout.dialog_translate, null);
// 从布局中获得原语言和翻译后的目标语言的下拉选择框
final androidx.appcompat.widget.AppCompatSpinner fromSpinner = dialogView.findViewById(R.id.spinner_from);
final androidx.appcompat.widget.AppCompatSpinner toSpinner = dialogView.findViewById(R.id.spinner_to);
@ -219,31 +213,25 @@ public class NoteEditActivity extends Activity implements OnClickListener,
ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
android.R.layout.simple_spinner_item, languages);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// 给两个下拉框用上适配器
fromSpinner.setAdapter(adapter);
toSpinner.setAdapter(adapter);
// 设置默认选择
// 原语言选择
fromSpinner.setSelection(selectedFromIndex[0]);
// 目标语言选择
toSpinner.setSelection(selectedToIndex[0]);
// 把自定义的试图设置到对话框构建器中
builder.setView(dialogView);
// 设置确定按钮
builder.setPositiveButton("翻译", (dialog, which) -> {
// 获取选择的原语言和目标语言的索引
selectedFromIndex[0] = fromSpinner.getSelectedItemPosition();
selectedToIndex[0] = toSpinner.getSelectedItemPosition();
// 如果相同,提示用户并返回
if (selectedFromIndex[0] == selectedToIndex[0]) {
Toast.makeText(NoteEditActivity.this, "源语言和目标语言不能相同", Toast.LENGTH_SHORT).show();
return;
}
// 根据索引获取对应的语种
String from = languageCodes[selectedFromIndex[0]];
String to = languageCodes[selectedToIndex[0]];
@ -253,22 +241,18 @@ public class NoteEditActivity extends Activity implements OnClickListener,
.setCancelable(false)
.show();
// 执行翻译 调用翻译服务API
// 执行翻译
mTranslationService.translate(text, from, to, new TranslationService.TranslationCallback() {
@Override
// 回调成功的结果
public void onSuccess(String translatedText) {
loadingDialog.dismiss();
// 显示翻译结果
showTranslationResult(text, translatedText);
}
@Override
// 回调时被的结果
public void onFailure(String errorMessage) {
loadingDialog.dismiss();
Log.e(TAG, "翻译失败: " + errorMessage); // 加日志
// 显示错误的信息
Toast.makeText(NoteEditActivity.this, errorMessage, Toast.LENGTH_SHORT).show();
}
});

Loading…
Cancel
Save