Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
andey.b
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 16
#1

Microsoft Translator Java API - Программирование Android

04.05.2012, 00:35. Просмотров 2254. Ответов 13
Метки нет (Все метки)

в связи с закрытием бесплатного API google translate пытаюсь прикрутить аналог от мелкомягких (bing translator).

ссыль на исходники и кое-какие мануалы

собственно в интернете мало инфы нарыл по теме, и в основном на англо-японском.

из того что разобрал сам:

1. мэйн: всё очень просто - один эдит, одна пимпа и один текстВью.
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
 
    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" 
        android:hint="Введите свой текст"
        >
 
        <requestFocus />
    </EditText>
 
 
 
    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="НАЖМИ" />
 
 
    <TextView
        android:id="@+id/TextView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Введите свой текст" />
 
</LinearLayout>
2. манифест разумеется андроид_пермишен_интернет

3. и вот в активити.ява
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package ru.android.helloworld;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Button;
import android.widget.TextView;
 
import com.memetix.mst.language.Language;
import com.memetix.mst.translate.Translate;
 
public class HelloWorldActivity extends Activity {
    
    private TextView mText;
    private EditText mEdit;
    
    @Override
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        mText = (TextView)findViewById(R.id.TextView1);
        mEdit = (EditText)findViewById(R.id.editText1);
        
        Translate.setClientId("здесь_клиентАйДи");
        
        Translate.setClientSecret("и_соответственно_клиентСекрет");
        
        final Button button1 = (Button) findViewById(R.id.button1);
        
        final String translatedText;
        try {
            translatedText = Translate.execute("Hello World"/*mEdit.getText().toString() желательно такое развитие событий, но для теста пусть будет хотябы привет мир*/, Language.ENGLISH, Language.RUSSIAN);
            button1.setOnClickListener(
                    new View.OnClickListener() 
                        {
                            public void onClick(View v) {mText.setText(translatedText);}
                        }
                    );
        } catch (Exception e) {
            mText.setText("ERROR");
        };
 
    };
}
максимальное соответствие квикстарту с сайта разрабов, плюс кое какие всплывшие ошибки привели код в такой вид. явных ошибок не наблюдается. но ВМ при запуске ругается благим матом, мол приложение остановлено.

помогите разобраться, или предложите свои решения для онлайн перевода.
вопрос является частью довольно интересного проекта, над которым тружусь для дипломной работы.

заранее спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2012, 00:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Microsoft Translator Java API (Программирование Android):

Android SDK Manager не отображает платформы 2.3.3 (API 10), 2.3.1 (API 9). Как быть? - Программирование Android
Добрый день! Использую Android Studio под Windows 7. Из-за несовместимости с операционной системой Android SDK Manager не отображает...

Android Studio не дает работать с API 8 без установленного API 21 - Программирование Android
Удалил все не интересующие меня библиотеки и поставил только API Level 8. Но при создании приложения вылезает куча ошибок таких как: Что...

Ошибка minSDK(API 23, N preview) != deviceSDK(API 17) - Программирование Android
Недавно начал учить андроид и возникла такая ошибка, когда я пытаюсь запустить проект на своем телефоне или эмуляторе. При этом в проекте...

Где взять Java API от MicroSoft? - Java
Не могу нигде найти описание майкрософтовских(InternetExplorer) классов ява.

Microsoft Translator: как перевести большой объем текста - C#
пишу парсер, парсер занаганяет в переводчик текст с HTML тегами, эсли статти малинкие всё отлично, эсли большые тогда проблема. Использую...

Microsoft Translation API - Python
Добрый вечер! Изучаю python 3.5, дело дошло до HTTP запросов. Для усвоения выбрал создание переводчика на основе microsoft api. Но над...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
flashok
86 / 88 / 1
Регистрация: 14.02.2009
Сообщений: 293
04.05.2012, 13:19 #2
https://github.com/boatmeme/microsof...-api/issues/27
0
andey.b
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 16
04.05.2012, 16:25  [ТС] #3
спасибо, но сразу бросились в глаза слова "sometimes" и "on Android 4.0".
Как я понимаю иногда, значит не всегда, и уровень SDK у меня 10 (соответственно Android 2.3.3)

Разбираюсь дальше.
Жду Ваши предложения.
Если разберусь сам, то, само собой, поделюсь=)
0
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
04.05.2012, 22:55 #4
Цитата Сообщение от andey.b Посмотреть сообщение
но ВМ при запуске ругается благим матом, мол приложение остановлено.
хм, почему я не удвилен? ах да, точно, ведь вы запустили длительную задачи в UI потоке.
1
andey.b
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 16
05.05.2012, 00:53  [ТС] #5
Цитата Сообщение от silentnuke Посмотреть сообщение
хм, почему я не удвилен? ах да, точно, ведь вы запустили длительную задачи в UI потоке.
хорошо, а теперь не могли бы Вы подсказать выход из этой ситуации - изменить потоки или как-то возможно урегулировать выполнение процессов установкой таймаутов?

позже отпишу, вышло ли. но спасибо!

Добавлено через 1 час 6 минут
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package ru.android.helloworld;
 
import android.app.Activity;
import android.os.Bundle;
 
import android.os.Handler;
import android.os.Message;
 
import android.view.View;
import android.widget.EditText;
import android.widget.Button;
import android.widget.TextView;
 
import com.memetix.mst.language.Language;
import com.memetix.mst.translate.Translate;
 
public class HelloWorldActivity extends Activity {
    
    private TextView mText;
    private EditText mEdit;
    
    @Override
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        mText = (TextView)findViewById(R.id.TextView1);
        mEdit = (EditText)findViewById(R.id.editText1);
        
        Translate.setClientId("айди");
        
        Translate.setClientSecret("секрет");
        
        final Button button1 = (Button) findViewById(R.id.button1);
        
            Handler handler = new Handler() {
                @Override
                public void handleMessage(Message msg) {
                    final String translatedText;
                        try {
                            translatedText = Translate.execute(mEdit.getText().toString(), Language.ENGLISH, Language.RUSSIAN);
                            
                            button1.setOnClickListener(
                                    new View.OnClickListener() 
                                        {
                                            public void onClick(View v) {mText.setText(translatedText);}
                                        }
                                    );
                        } catch (Exception e) {
                            e.printStackTrace();
                            mText.setText("ERROR");
                        }
                }
            };
            Message msg = new Message();
            msg.obj = this;
            handler.sendMessageDelayed(msg, 25000);
    };
}
вот что получилось. не уверен, что правильно всё сделал. возможно по-этому до сих пор виртуальная машина ругается.
0
flashok
86 / 88 / 1
Регистрация: 14.02.2009
Сообщений: 293
05.05.2012, 01:44 #6
эм на самом деле то что вы написали не есть верно
+ то что вам посоветовали выше конечно правильно но не влият на появление эксепшенов

ругаеться именно эта библиотека
вот вариант поправильней
http://dl.dropbox.com/u/20178650/TestappActivity.java

смотрим что пишет logcat
http://dl.dropbox.com/u/20178650/log.txt
(если честно я так и не понял что эта либа хочет)

Может я плохо рыскал по нету или чего то не понял

p.s. удачи
1
andey.b
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 16
05.05.2012, 02:54  [ТС] #7
Цитата Сообщение от flashok Посмотреть сообщение
эм на самом деле то что вы написали не есть верно
+ то что вам посоветовали выше конечно правильно но не влият на появление эксепшенов

ругаеться именно эта библиотека
вот вариант поправильней
http://dl.dropbox.com/u/20178650/TestappActivity.java

смотрим что пишет logcat
http://dl.dropbox.com/u/20178650/log.txt
(если честно я так и не понял что эта либа хочет)

Может я плохо рыскал по нету или чего то не понял

p.s. удачи
сам сейчас озадачен мыслью, что биб-ка возможно как-то не так прикручивается.
спасибо Вам, ушел читать. Само собой сюда отпишу еще.

Добавлено через 15 минут
очень странно, у меня в логкэте совсем другая история вышла
05-04 22:03:20.332: E/AndroidRuntime(670): FATAL EXCEPTION: main
05-04 22:03:20.332: E/AndroidRuntime(670): java.lang.NoClassDefFoundError: com.memetix.mst.translate.Translate
05-04 22:03:20.332: E/AndroidRuntime(670): at ru.android.helloworld.HelloWorldActivity.onCreate(HelloWorldActivity.java:31)
05-04 22:03:20.332: E/AndroidRuntime(670): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-04 22:03:20.332: E/AndroidRuntime(670): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
05-04 22:03:20.332: E/AndroidRuntime(670): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
05-04 22:03:20.332: E/AndroidRuntime(670): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
05-04 22:03:20.332: E/AndroidRuntime(670): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
05-04 22:03:20.332: E/AndroidRuntime(670): at android.os.Handler.dispatchMessage(Handler.java:99)
05-04 22:03:20.332: E/AndroidRuntime(670): at android.os.Looper.loop(Looper.java:123)
05-04 22:03:20.332: E/AndroidRuntime(670): at android.app.ActivityThread.main(ActivityThread.java:3683)
05-04 22:03:20.332: E/AndroidRuntime(670): at java.lang.reflect.Method.invokeNative(Native Method)
05-04 22:03:20.332: E/AndroidRuntime(670): at java.lang.reflect.Method.invoke(Method.java:507)
05-04 22:03:20.332: E/AndroidRuntime(670): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-04 22:03:20.332: E/AndroidRuntime(670): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-04 22:03:20.332: E/AndroidRuntime(670): at dalvik.system.NativeStart.main(Native Method)
может эклипс уже с ума сходит? были подобные проблемы?
подключаю либу соответственно через Build Path/Lib-s/AddJARs

Добавлено через 42 минуты
не верю! НО заработало!

в папке с проектом создал подпапку libs, перезалил туда либу, переподключил её к проекту как делал и раньше и, О ВЕЛИКИЙ БУБЕН, заработало.

Всем спасибо=)
0
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
05.05.2012, 10:19 #8
Цитата Сообщение от andey.b Посмотреть сообщение
в папке с проектом создал подпапку libs, перезалил туда либу, переподключил её к проекту как делал и раньше и, О ВЕЛИКИЙ БУБЕН, заработало.

Всем спасибо=)
бубен здесь не причем, с adt 17.0 все либы должны подключаться только через папку libs.
0
andey.b
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 16
05.05.2012, 16:16  [ТС] #9
Цитата Сообщение от silentnuke Посмотреть сообщение
бубен здесь не причем, с adt 17.0 все либы должны подключаться только через папку libs.
Ну я просто не знал что это НАСТОЛЬКО серьёзная ошибка, в Path даже все пути к проекту прописал...
Буду теперь всегда об этом помнить.
0
flashok
86 / 88 / 1
Регистрация: 14.02.2009
Сообщений: 293
05.05.2012, 17:11 #10
Мне интересно у тебя теперь коректно работает (переводит) или нет.?
так как ошибок описаных выше я не допускал и при этом
у меня всегда отрабатывал catch и там ругалась эта либа
Java
1
2
3
4
5
      try {
               translatedText = Translate.execute("Hello World",Language.ENGLISH, Language.RUSSIAN);
            } catch (Exception e) {
                e.printStackTrace();
            }
О_о
0
andey.b
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 16
05.05.2012, 17:37  [ТС] #11
полностью скопировал предложенный тобой текст, единственно что изменил
"Hello World" на mEdit.getText().toString()
возможно он ругается на то что объявленный Эдит нигде не используется?!
корректно работает, только сам перевод хромает чутка (но уж это проблема самого переводчика от бинга) например Home перевел мне как "Главная страница" =)) но что поделать.
думаю это порос времени. если Google Transl. так и будет независимо платным то в поисках достойной бесплатной альтернативы многие перейдут именно на это решение, а там уже чем народу больше тем умнее становится переводчик.

щейчас попробую погуглить еще ошибку выданную тебе логкэтом

Добавлено через 3 минуты
аа, ну еще клиентские айди и секрет исправил, если чего=)

Добавлено через 11 минут
и еще уж совсем безумство, но посмотри у себя
перед блоком с трай-кэтч
String translatedText = "error";
случайно не "Error" написано? попробуй поиграть с этим... "ошибка" например написать. бох его знает о чем компилятор может подумать (хотя будет конечно уж очень удивительно).
0
SpbMap
1 / 1 / 0
Регистрация: 31.05.2012
Сообщений: 8
31.05.2012, 12:18 #12
Цитата Сообщение от flashok Посмотреть сообщение
эм на самом деле то что вы написали не есть верно
+ то что вам посоветовали выше конечно правильно но не влият на появление эксепшенов

ругаеться именно эта библиотека
вот вариант поправильней
http://dl.dropbox.com/u/20178650/TestappActivity.java

смотрим что пишет logcat
http://dl.dropbox.com/u/20178650/log.txt
(если честно я так и не понял что эта либа хочет)

Может я плохо рыскал по нету или чего то не понял

p.s. удачи

05-05 00:43:05.162: W/System.err(255): java.lang.Exception: [microsoft-translator-api] Error retrieving translation : Hostname <datamarket.accesscontrol.windows.net> was not verified

Таже ошибка в Android
Думаю надо копать в сторону SSL сертификации

http://blog.synyx.de/2010/06/android...-certificates/
http://stackoverflow.com/questions/4...ion-issuername
http://en.wikibooks.org/wiki/Program...SL_Certificate
http://stackoverflow.com/questions/1...ptance-android
http://stackoverflow.com/questions/2...tps-on-android

Как то сложно все в Android
Хотя в "простой", десктопной Java все работает

Добавлено через 7 минут
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
 
 
 
public class Translate1 {
 
    public static void main(String[] args) throws ClientProtocolException, IOException {
        try {
            // Construct content
            String content = "grant_type=client_credentials";
            content += "&client_id=CLIENT_ID";
            content += "&client_secret=" + URLEncoder.encode("CLIENT_SECRET");
            content += "&scope=http://api.microsofttranslator.com";
 
            // Send data
            URL url = new URL("https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/");
            URLConnection conn = url.openConnection();
 
            // Let the run-time system (RTS) know that we want input.
            conn.setDoInput(true);
            // Let the RTS know that we want to do output.
            conn.setDoOutput(true);
            // No caching, we want the real thing.
            conn.setUseCaches(false);
            // Specify the content type.
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
 
            // Send POST output.
            DataOutputStream printout = new DataOutputStream(conn.getOutputStream());
            printout.writeBytes(content);
            printout.flush();
            printout.close();
 
            // Get response data.
            DataInputStream input = new DataInputStream(conn.getInputStream());
            String str = "";
            int start = 0;
            int end = 0;
            String accessToken = "";
            while (null != ((str = input.readLine()))) {
                System.out.println(str);
                start = str.indexOf(":") + 2;
                end = str.indexOf(",") - 1;
                accessToken = str.substring(start, end);
                System.out.println("access token: ");
                System.out.println(accessToken);
            }
            input.close();
 
 
            //Call Microsoft Translate
            HttpClient httpclient = new DefaultHttpClient();
            String urlStr = "http://api.microsofttranslator.com/v2/Http.svc/Translate?text="+URLEncoder.encode("hello world")+"&from=en&to=ru";
            urlStr = urlStr + "&appId=" + URLEncoder.encode("Bearer "+accessToken);
            HttpGet httpGet = new HttpGet(urlStr);
            
            HttpResponse response = httpclient.execute(httpGet);
            System.out.println(response.getStatusLine());
            HttpEntity entity = response.getEntity();
 
            if (entity != null) {
                InputStream instream = entity.getContent();
                int l;
                Writer writer = new StringWriter();
                char[] buffer = new char[1024];
                Reader reader = new BufferedReader(new InputStreamReader(instream, "UTF-8"));
                while ((l = reader.read(buffer)) != -1) {
                    writer.write(buffer, 0, l);
                }
                //print result
                System.out.println(writer.toString());
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Код который так же работает на десктопе, но не в Android

Взято отсюда:
http://konsultantspb.ru/microsoft-translator-java-api/
0
andey.b
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 16
31.05.2012, 15:02  [ТС] #13
Цитата Сообщение от SpbMap Посмотреть сообщение
странная статья, в заголовке MS, в тексте Google, в коде опять MS. смахивает на копипаст, так что посоветовал бы поискать источник понадежней.

Кстати, код рабочий, хотя работает не быстро. Получилось запустить на реальном андроид устройстве, ищите ошибку.

Зы: Также получилось прикрутить к OCR библиотеке. Все работает, практически всем доволен.
0
SpbMap
1 / 1 / 0
Регистрация: 31.05.2012
Сообщений: 8
31.05.2012, 15:48 #14
Цитата Сообщение от andey.b Посмотреть сообщение
странная статья, в заголовке MS, в тексте Google, в коде опять MS. смахивает на копипаст, так что посоветовал бы поискать источник понадежней.

Кстати, код рабочий, хотя работает не быстро. Получилось запустить на реальном андроид устройстве, ищите ошибку.

Зы: Также получилось прикрутить к OCR библиотеке. Все работает, практически всем доволен.
Код полностью рабочий. Но у меня не удалось запустить на устройстве и в эмуляторе. Работает только в десктопной Java
На какой версии Android вы запускали, в эмуляторе пробовали?...
Можете подробнее описать
Tnx!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2012, 15:48
Привет! Вот еще темы с ответами:

Win API в Microsoft Visual Studio 2008 - Visual C++
Здравствуйте, уважаемые форумчане! Возникла такая проблема. Пишу простенькую программу с применением Win API, но компилятор ругается(( ...

Применение Microsoft Computer Vision API для анализа изображения - .NET
Уважаемые форумчане, нужна помощь. Помогите написать программу которая будет отправлять на сервер изображение для обработки (выбранное с...

Как установить украинский голос для Microsoft Speech API - C#
Необходимо сделать работу на тему &quot;Синтез речи&quot; Я решил делать на C# использовав стандартную библиотеку Microsoft.Speech Но у меня...

Java + api vk - Java SE
Здрaвствуйте.. Нужнa программа, которая будет логиниться в вк, разными аккаунтами, выколупывaть фотографии из них, и записывать где-нибудь....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
31.05.2012, 15:48
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru