首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >basic4android android.os.networkonmainthreadexception错误

basic4android android.os.networkonmainthreadexception错误
EN

Stack Overflow用户
提问于 2015-01-13 11:22:13
回答 1查看 830关注 0票数 0

我正在尝试使用我的安卓设备来控制LED,我正在使用Basic4android的应用程序。我让一切正常工作,但每次我按下一个按钮来打开/关闭LED。我收到这个错误说"android.os.NetworkOnMainThreadException“..。这是我的代码:

代码语言:javascript
复制
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
     Dim request As HttpRequest
     Dim HttpClient1 As HttpClient
End Sub

 Sub Globals
'These global variables will be redeclared each time the activity is created.
'These variables can only be accessed from this module.

    Dim Button1 As Button
    Dim Button2 As Button
    Dim Button3 As Button
    Dim Button4 As Button
    Dim Button5 As Button
    Dim Button6 As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("main")
    HttpClient1.Initialize("HttpClient1")
End Sub

Sub HttpClient1_ResponseSuccess (Response As HttpResponse, TaskId As Int)
    Dim resultString As String
    resultString = Response.GetString("UTF8")
End Sub

Sub HttpClient1_ResponseError (Response As HttpResponse, Reason As String, StatusCode As Int,     TaskId As Int)
    Log("Error connecting: " & Reason &" "& StatusCode)
    If Response <> Null Then
    Log(Response.GetString("UTF8"))
    Response.Release
    End If
End Sub

Sub Button6_Click
  request.InitializeGet("http://192.168.0.8/?BlueOFF")
  HttpClient1.Execute(request, 1)
End Sub

Sub Button5_Click
   request.InitializeGet("http://192.168.0.8/?BlueON")
   HttpClient1.Execute(request, 1)
End Sub

Sub Button4_Click
  request.InitializeGet("http://192.168.0.8/?GreenOFF")
  HttpClient1.Execute(request, 1)
End Sub

Sub Button3_Click
    request.InitializeGet("http://192.168.0.8/?GreenON")
    HttpClient1.Execute(request, 1)
End Sub

Sub Button2_Click
    request.InitializeGet("http://192.168.0.8/?RedOFF")
    HttpClient1.Execute(request, 1)
End Sub

Sub Button1_Click
    request.InitializeGet("http://192.168.0.8/?RedON")
    HttpClient1.Execute(request, 1)
End Sub

我研究过这个问题,它说我正在主线程上做一个网络操作……我是basic4android新手..关于如何在单独的线程中进行网络操作,有什么建议吗?任何帮助都是非常感谢的..谢谢你:D

最好的问候,考德威尔D。

EN

回答 1

Stack Overflow用户

发布于 2015-04-22 17:58:12

有两种解决方案。最简单的方法是在Android版本更高的API 9上禁用严格模式:

代码语言:javascript
复制
Sub DisableStrictMode
   Dim jo As JavaObject
   jo.InitializeStatic("android.os.Build.VERSION")
   If jo.GetField("SDK_INT") > 9 Then
     Dim policy As JavaObject
     policy = policy.InitializeNewInstance("android.os.StrictMode.ThreadPolicy.Builder", Null)
     policy = policy.RunMethodJO("permitAll", Null).RunMethodJO("build", Null)
     Dim sm As JavaObject
     sm.InitializeStatic("android.os.StrictMode").RunMethod("setThreadPolicy", Array(policy))
   End If
End Sub

更好的解决方案是将Response.GetString()调用(已弃用)替换为异步Response.GetAsynchronously()调用。

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

https://stackoverflow.com/questions/27914407

复制
相关文章

相似问题

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