Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android中使用Microsoft Translator API_Java_Android_Azure_Microsoft Translator - Fatal编程技术网

Java 如何在Android中使用Microsoft Translator API

Java 如何在Android中使用Microsoft Translator API,java,android,azure,microsoft-translator,Java,Android,Azure,Microsoft Translator,用于android示例的Microsoft Translator API自2017年3月(仅今年)起就已被弃用。所以我很难在android上翻译文本。有人能帮我在安卓系统上工作吗?。只是我已经在java中使用了它,但我无法在Android上使用它。我已经尝试使用asynctask,但是没有效果,没有输出任何翻译。或者我只是做了一个错误的asyc任务 应用程序的界面如下所示: private class TransAsynTask extends AsyncTask<String, Void

用于android示例的Microsoft Translator API自2017年3月(仅今年)起就已被弃用。所以我很难在android上翻译文本。有人能帮我在安卓系统上工作吗?。只是我已经在java中使用了它,但我无法在Android上使用它。我已经尝试使用asynctask,但是没有效果,没有输出任何翻译。或者我只是做了一个错误的asyc任务

应用程序的界面如下所示:

private class TransAsynTask extends AsyncTask<String, Void, String>{

    @Override
    protected String doInBackground(String... strings) {
        String output = getTranslation(strings[0]);
        return output;
    }

    @Override
    protected void onPostExecute(String s) {
        txtTranslatedText.setText("Output: " + s);
        super.onPostExecute(s);
    }
}


它只有一个简单的文本字段,带有翻译,应该在另一个文本字段上输出。翻译是从韩语到英语


Github项目文件在这里

Android代码就是这样

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

import org.apache.commons.io.IOUtils;

import java.net.URL;
import java.net.URLEncoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.net.ssl.HttpsURLConnection;


public class MainActivity extends AppCompatActivity {

//MS Translator Key is in here
public static String key = "<The MS Assigned Translator Key>";
private TextView txtTranslatedText, txtOriginalText;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    txtOriginalText = findViewById(R.id.txtOriginalText);
    txtTranslatedText = findViewById(R.id.txtTranslatedText);


}


public void translate(View view) {
//        String textOrig = txtOriginalText.getText().toString();
//        String textOrig ="안녕하세요 123 -)^ 친구";
        String textOrig;
        textOrig=txtOriginalText.getText().toString();
        String output;
    output=getTranslation(textOrig);
    txtTranslatedText.setText(output);
}


public static String getTranslation(String translatedTextStr) {


    try {
        // Get the access token
        // The key got from Azure portal, please see https://docs.microsoft.com/en-us/azure/cognitive-services/cognitive-services-apis-create-account
        String authenticationUrl = "https://api.cognitive.microsoft.com/sts/v1.0/issueToken";
        HttpsURLConnection authConn = (HttpsURLConnection) new URL(authenticationUrl).openConnection();
        authConn.setRequestMethod("POST");
        authConn.setDoOutput(true);
        authConn.setRequestProperty("Ocp-Apim-Subscription-Key", key);
        IOUtils.write("", authConn.getOutputStream(), "UTF-8");
        String token = IOUtils.toString(authConn.getInputStream(), "UTF-8");
//            System.out.println(token);  //Code to Display Token

//          Using the access token to build the appid for the request url
            String appId = URLEncoder.encode("Bearer " + token, "UTF-8");
            String text = URLEncoder.encode(translatedTextStr, "UTF-8");
            String from = "ko";
            String to = "en";
            String translatorTextApiUrl = String.format("https://api.microsofttranslator.com/v2/http.svc/GetTranslations?appid=%s&text=%s&from=%s&to=%s&maxTranslations=5", appId, text, from, to);
            HttpsURLConnection translateConn = (HttpsURLConnection) new URL(translatorTextApiUrl).openConnection();
            translateConn.setRequestMethod("POST");
            translateConn.setRequestProperty("Accept", "application/xml");
            translateConn.setRequestProperty("Content-Type", "text/xml");
            translateConn.setDoOutput(true);
            String TranslationOptions = "<TranslateOptions xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\">" +
                    "<Category>general</Category>" +
                    "<ContentType>text/plain</ContentType>" +
                    "<IncludeMultipleMTAlternatives>True</IncludeMultipleMTAlternatives>" +
                    "<ReservedFlags></ReservedFlags>" +
                    "<State>contact with each other</State>" +
                    "</TranslateOptions>";
            translateConn.setRequestProperty("TranslationOptions", TranslationOptions);
            IOUtils.write("", translateConn.getOutputStream(), "UTF-8");
            String resp = IOUtils.toString(translateConn.getInputStream(), "UTF-8");

//            System.out.println(resp+"\n\n");
            String s=resp;
            Pattern assign_op=Pattern.compile("(<TranslatedText>)"
                    + "|(<\\/TranslatedText>)"
                    + "|[()\\\\[\\\\]{};=#.,'\\\\^:@!$%&_`*-<>]"
                    + "|[a-zA-Z0-9\\s]*"
                    + "");
            Matcher m = assign_op.matcher(s) ;

        String actualTranslation="";
        Boolean endOfTransTxt=false,startOfTransTxt=false,concat=false;
        String foundRegexStr="",tempStr="";

        while (m.find()) {
            foundRegexStr=m.group();

            if(m.group().matches("(<TranslatedText>)"))  {
                startOfTransTxt=true;
            }
            else if(m.group().matches("(<\\/TranslatedText>)"))    {
                endOfTransTxt=true;
                concat=false;
            }
            else{
                startOfTransTxt=false;
                endOfTransTxt=false;
            }

            if(startOfTransTxt==true)  {
                concat=true;
            }
            else if(concat==true) {
                tempStr=tempStr+""+m.group();
            }
            else   {

            }
        }
//    System.out.println("\nTranslated Text:  "+tempStr);
            translatedTextStr=tempStr;


    } catch (Exception e) {
        e.printStackTrace();
    }

    return translatedTextStr;
}


}
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.support.v7.app.AppActivity;
导入android.view.view;
导入android.widget.TextView;
导入org.apache.commons.io.IOUtils;
导入java.net.URL;
导入java.net.urlcoder;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
导入javax.net.ssl.HttpsURLConnection;
公共类MainActivity扩展了AppCompatActivity{
//微软翻译的钥匙在这里
公共静态字符串键=”;
私有文本视图txtTranslatedText,txtOriginalText;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtOriginalText=findviewbyd(R.id.txtOriginalText);
txtTranslatedText=findViewById(R.id.txtTranslatedText);
}
公共无效转换(视图){
//字符串textOrig=txtOriginalText.getText().toString();
//字符串textOrig=”안녕하세요 123 -)^ 친구";
字符串文本格式;
textOrig=txtOriginalText.getText().toString();
字符串输出;
输出=getTranslation(textOrig);
TXTranslatedText.setText(输出);
}
公共静态字符串getTranslation(字符串translatedTextStr){
试一试{
//获取访问令牌
//密钥已从Azure门户获取,请参阅https://docs.microsoft.com/en-us/azure/cognitive-services/cognitive-services-apis-create-account
字符串身份验证URL=”https://api.cognitive.microsoft.com/sts/v1.0/issueToken";
HttpsURLConnection authConn=(HttpsURLConnection)新URL(authenticationUrl).openConnection();
authConn.setRequestMethod(“POST”);
authConn.setDoOutput(真);
setRequestProperty(“Ocp Apim订阅密钥”,密钥);
write(“,authConn.getOutputStream(),“UTF-8”);
字符串标记=IOUtils.toString(authConn.getInputStream(),“UTF-8”);
//System.out.println(令牌);//显示令牌的代码
//使用访问令牌为请求url生成appid
字符串appId=URLEncoder.encode(“载体”+令牌,“UTF-8”);
字符串text=URLEncoder.encode(translatedTextStr,“UTF-8”);
字符串from=“ko”;
字符串to=“en”;
String translatorTextApiUrl=String.format(“https://api.microsofttranslator.com/v2/http.svc/GetTranslations?appid=%s&text=%s&from=%s&to=%s&maxTranslations=5“,appId,text,from,to);
HttpsURLConnection translateConn=(HttpsURLConnection)新URL(translaterExtapiURL).openConnection();
translatecon.setRequestMethod(“POST”);
setRequestProperty(“接受”、“应用程序/xml”);
setRequestProperty(“内容类型”、“文本/xml”);
translatecon.setDoOutput(真);
字符串TranslationOptions=“”+
“一般”+
“文本/纯文本”+
“对”+
"" +
“相互联系”+
"";
translatecon.setRequestProperty(“TranslationOptions”,TranslationOptions);
write(“,translatecon.getOutputStream(),“UTF-8”);
String resp=IOUtils.toString(translatecon.getInputStream(),“UTF-8”);
//System.out.println(resp+“\n\n”);
字符串s=resp;
Pattern assign\u op=Pattern.compile(“()”
+ "|()"
+ "|[()\\\\[\\\\]{};=#.,'\\\\^:@!$%&_`*-]"
+“|[a-zA-Z0-9\\s]*”
+ "");
匹配器m=分配匹配器;
字符串实际翻译=”;
布尔值endOfTransTxt=false,startofttranstxt=false,concat=false;
字符串foundRegexStr=“”,tempStr=“”;
while(m.find()){
foundRegexStr=m.group();
如果(m.group()匹配(“()”){
startOfTransTxt=真;
}
如果(m.group()匹配(“()”),则为else{
endOfTransTxt=真;
concat=假;
}
否则{
startOfTransTxt=假;
endOfTransTxt=假;
}
如果(StartToFTransTXT==true){
concat=真;
}
else if(concat==true){
tempStr=tempStr+“”+m.group();
}
否则{
}
}
//System.out.println(“\n翻译文本:“+tempStr”);
translatedTextStr=tempStr;
}捕获(例外e){
e、 printStackTrace();
}
返回translatedTextStr;
}
}

我认为你做错了
异步任务
。 您可以这样做:

private class TransAsynTask extends AsyncTask<String, Void, String>{

    @Override
    protected String doInBackground(String... strings) {
        String output = getTranslation(strings[0]);
        return output;
    }

    @Override
    protected void onPostExecute(String s) {
        txtTranslatedText.setText("Output: " + s);
        super.onPostExecute(s);
    }
}

请分享ioutil代码到什么代码?你是说ioutil库?我只是通过在android studio中添加jar/folder选项将org.apache.commons.IO.IOUtils添加到我的android studio库中,因为afaik在android中与IO Utils的java/netbeans导入相当。之后,红色波浪线消失了,我认为med我很好地移植了这些库。顺便说一句,我也在github上上传了这个,因为当你同步它时,库已经包含在内了。请看一看。我还没有找到解决方案。:(:/