Форум программистов, компьютерный форум 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. Просмотров 2190. Ответов 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");
        };
 
    };
}
максимальное соответствие квикстарту с сайта разрабов, плюс кое какие всплывшие ошибки привели код в такой вид. явных ошибок не наблюдается. но ВМ при запуске ругается благим матом, мол приложение остановлено.

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

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

Разбираюсь дальше.
Жду Ваши предложения.
Если разберусь сам, то, само собой, поделюсь=)
silentnuke
Android Programmer
138 / 139 / 5
Регистрация: 08.12.2010
Сообщений: 421
04.05.2012, 22:55     microsoft translator java api #4
Цитата Сообщение от andey.b Посмотреть сообщение
но ВМ при запуске ругается благим матом, мол приложение остановлено.
хм, почему я не удвилен? ах да, точно, ведь вы запустили длительную задачи в UI потоке.
andey.b
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 16
05.05.2012, 00:53  [ТС]     microsoft translator java api #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);
    };
}
вот что получилось. не уверен, что правильно всё сделал. возможно по-этому до сих пор виртуальная машина ругается.
flashok
 Аватар для flashok
86 / 88 / 1
Регистрация: 14.02.2009
Сообщений: 293
05.05.2012, 01:44     microsoft translator java api #6
эм на самом деле то что вы написали не есть верно
+ то что вам посоветовали выше конечно правильно но не влият на появление эксепшенов

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

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

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

p.s. удачи
andey.b
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 16
05.05.2012, 02:54  [ТС]     microsoft translator java api #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, перезалил туда либу, переподключил её к проекту как делал и раньше и, О ВЕЛИКИЙ БУБЕН, заработало.

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

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

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

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

Добавлено через 11 минут
и еще уж совсем безумство, но посмотри у себя
перед блоком с трай-кэтч
String translatedText = "error";
случайно не "Error" написано? попробуй поиграть с этим... "ошибка" например написать. бох его знает о чем компилятор может подумать (хотя будет конечно уж очень удивительно).
SpbMap
1 / 1 / 0
Регистрация: 31.05.2012
Сообщений: 8
31.05.2012, 12:18     microsoft translator java api #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/
andey.b
1 / 1 / 0
Регистрация: 03.06.2010
Сообщений: 16
31.05.2012, 15:02  [ТС]     microsoft translator java api #13
Цитата Сообщение от SpbMap Посмотреть сообщение
странная статья, в заголовке MS, в тексте Google, в коде опять MS. смахивает на копипаст, так что посоветовал бы поискать источник понадежней.

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

Зы: Также получилось прикрутить к OCR библиотеке. Все работает, практически всем доволен.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2012, 15:48     microsoft translator java api
Еще ссылки по теме:

Работа с vkontakte API Android
Like Button с использованием VK API Android
Android SDK Manager не отображает платформы 2.3.3 (API 10), 2.3.1 (API 9). Как быть? Android
Android Ошибка minSDK(API 23, N preview) != deviceSDK(API 17)
API 24 и RadioButton Android

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

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

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

Зы: Также получилось прикрутить к OCR библиотеке. Все работает, практически всем доволен.
Код полностью рабочий. Но у меня не удалось запустить на устройстве и в эмуляторе. Работает только в десктопной Java
На какой версии Android вы запускали, в эмуляторе пробовали?...
Можете подробнее описать
Tnx!
Yandex
Объявления
31.05.2012, 15:48     microsoft translator java api
Ответ Создать тему
Опции темы

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