首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Ruboto访问网络

从Ruboto访问网络
EN

Stack Overflow用户
提问于 2015-01-31 18:52:40
回答 1查看 135关注 0票数 1

我正在尝试在Ruboto中使用来自Android的Ruby-DRb-Messages。我遇到了一个从Ruboto访问网络的问题,没有找到任何示例或文档来解决这个问题。

这是我的例子(我使用Ruboto QuickStartActivity并尝试添加我的东西):

代码语言:javascript
复制
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-Server和DRb-Client),DRb-stuff通过网络工作没有问题。但是如果我尝试上面的代码,logcat会显示:

代码语言:javascript
复制
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)

我的Android-Manifest包括:

代码语言:javascript
复制
<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正常工作呢?

EN

回答 1

Stack Overflow用户

发布于 2015-02-01 08:35:09

一种方法是在Thread中执行网络代码,然后对结果使用回调。

代码语言:javascript
复制
def butterfly
  @text_view.text = 'Button pressed'
  toast "trying to send a message"
  Thread.start do
    DRb.start_service
    myDRb = DRbObject.new_with_uri("druby://192.168.1.100:9918")
    result = myDRb.myMethod('This string should be processed by myMethod')
    process_result(result)
  end
end

def process_result(result)
  run_on_ui_thread do
    @text_view.text = 'Result received'
    toast "Got a result from the method: #{result}"
  end
end

希望这能有所帮助:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28250759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档