我是Java編程的新手,在過去的幾天裏,我一直在嘗試使用基本的英語到希臘語的語音翻譯應用程序,純粹是爲了幫助我學習一些(更高級的)概念。這是picture of the interface。使用Retrofit 2.0從網絡中提取信息API
到目前爲止,我已經獲得了兩種語言的語音識別功能,並且我決定使用MyMemory's API作爲翻譯的REST API。我正在使用Retrofit 2.0.0-beta2將HTTP API變成Java界面。
此刻,我只是試圖從MyMemory中提取單詞/短語的翻譯,並將其放置在我的應用程序中的文本字段中。
目前,我已經在我的項目三類:
- TranslateAPI(接口)
- TranslatedData
- MainActivity
TranslateAPI
public interface TranslateAPI {
@GET("get")
void getTranslation(@Query("q") String request, Callback<TranslatedData> cb);
}
TranslatedData
public class TranslatedData {
String translatedText;
public String getTranslatedText(){
return translatedText;
}
}
MainActivity(相關代碼)
public void translate(String toTranslate){
String request = "=" + toTranslate + "&langpair=" + langPair;
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://api.mymemory.translated.net/")
.build();
TranslateAPI service = retrofit.create(TranslateAPI.class);
service.getTranslation(request, new Callback<TranslatedData>() {
@Override
public void onResponse(Response<TranslatedData> response, Retrofit retrofit) {
System.out.println("Success");
//handle success
}
@Override
public void onFailure(Throwable t) {
System.out.println("Failure");
//handle failure
}
});
}
有幾個問題在這裏出現。首先,應用程序因translate()方法而崩潰,我無法理解爲什麼(我在android中的調試技巧仍然不存在)。任何人都可以請幫我弄清楚爲什麼?
其次,我如何解析服務器的響應?
我的代碼是否有任何其他缺陷,可以防止應用程序工作/崩潰?
我很抱歉,如果我的問題很差或直截了當,我仍然是Android的新手,我發現大多數關於改裝模糊和混亂的教程,因爲一半的指南是在Retrofit 1.x中編寫的,另一半是2.0。
插入你的手機我進入你的電腦。如果您使用的是Android Studio,則在將應用程序部署到您的設備時,它應該會自動打開到控制檯(logcat界面)。如果你沒有,你可以使用adb logcat手動捕獲你的設備上的信息。這是一個開始的好地方。某些可能導致您的應用崩潰的原因(我不是100%確定的),是主線程中的網絡使用或未聲明您的應用需要網絡訪問權限。 –
你好泰勒,感謝早日回覆。我要求清單文件上的網絡訪問權限。我非常抱歉,這個問題與translate()方法有關,因爲如果我註釋掉該方法,那麼該應用程序運行良好,沒有任何問題。我覺得我離解決方案只有一步之遙,但我不確定問題出在哪裏。 –