Я пытаюсь использовать Ruby-DRb-сообщения с Android с Ruboto. Я столкнулся с проблемой, связанной с сетью из Ruboto, и не нашел примеров или документации для решения этой проблемы.Доступ к сети из Ruboto
Это мой пример (я использовал Ruboto QuickStartActivity и пытался добавить свой материал):
require 'ruboto/widget'
require 'ruboto/util/toast'
require 'drb'
ruboto_import_widgets :Button, :LinearLayout, :TextView
class QuickStartActivity
def onCreate(bundle)
super
set_title 'My Title'
self.content_view =
linear_layout :orientation => :vertical do
@text_view = text_view :text => 'Test Buttons', :id => 42,
:layout => {:width => :match_parent},
:gravity => :center, :text_size => 48.0
button :text => 'Press me',
:layout => {:width => 300},
:id => 43, :on_click_listener => proc { butterfly }
end
rescue Exception
puts "Exception creating activity: #{$!}"
puts $!.backtrace.join("\n")
end
private
def butterfly
@text_view.text = 'Button pressed'
toast "trying to send a message"
DRb.start_service
myDRb = DRbObject.new_with_uri("druby://192.168.1.100:9918")
myDRb.myMethod('This string should be processed by myMethod')
end
end
Если я использую два Linux-машину (DRB-сервер и DRB-клиент), DRB-материал работает без проблемы через сеть. Но если я пытаюсь мой код, приведенный выше, LogCat показывает:
D/AndroidRuntime(17415): Shutting down VM
W/dalvikvm(17415): threadid=1: thread exiting with uncaught exception (group=0x2b4ea1f8)
E/AndroidRuntime(17415): FATAL EXCEPTION: main
E/AndroidRuntime(17415): android.os.NetworkOnMainThreadException
E/AndroidRuntime(17415): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
E/AndroidRuntime(17415): at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
My Android-манифеста включает в себя:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Согласно другим должностям (How to fix android.os.NetworkOnMainThreadException?) Я прочитал, эта ошибка выбрасывается, потому что это не можно использовать сеть из основного потока в Android.
Но как я могу исправить эту проблему на стороне Ruboto, чтобы заставить DRb работать?
Спасибо за вашу помощь, она сейчас работает. – Gordon
Рад помочь. Не стесняйтесь отмечать ответ как принятый и не забудьте сообщить о своем прогрессе в списке рассылки Ruboto. Мы любим слышать от новых разработчиков (http://groups.google.com/group/ruboto). – donV