从我所读到的一切来看,它应该是可行的,但是以下几点:
runOnUiThread {
recyclingView_Main.adapter = MainAdapter()
}
在…内
fun fetchJson(){
println("attempting to fetch JSON")
val url = "https://api.drn1.com.au/station/allstations"
val request = Request.Builder().url(url).build()
val client = OkHttpClient()
client.newCall(request).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
e.printStackTrace()
}
override fun onResponse(call: Call, response: Response) {
response.use {
if (!response.isSuccessful) throw IOException("Unexpected code $response")
for ((name, value) in response.headers) {
println("$name: $value")
}
val body = response.body!!.string()
val gson = GsonBuilder().create()
val stationfeed = gson.fromJson(body, StationsFeed::class.java)
runOnUiThread {
recyclingView_Main.adapter = MainAdapter()
}
println(body)
}
}
})
}
不工作。与应用程序加载类似,但使用的是recyclingView\u Main。adapter=MainAdapter()似乎未运行。
完整代码:
package com.example.drn1
import android.graphics.Color
import kotlinx.android.synthetic.main.activity_main.*
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import okhttp3.*
import java.io.IOException
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
recyclingView_Main.layoutManager = LinearLayoutManager( this, LinearLayoutManager.HORIZONTAL, false)
// recyclingView_Main.adapter = MainAdapter() --- THIS DOES WORK WHEN IT IS HERE
fetchJson()
}
fun fetchJson(){
println("attempting to fetch JSON")
val url = "https://api.drn1.com.au/station/allstations"
val request = Request.Builder().url(url).build()
val client = OkHttpClient()
client.newCall(request).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
e.printStackTrace()
}
override fun onResponse(call: Call, response: Response) {
response.use {
if (!response.isSuccessful) throw IOException("Unexpected code $response")
for ((name, value) in response.headers) {
println("$name: $value")
}
val body = response.body!!.string()
val gson = GsonBuilder().create()
val stationfeed = gson.fromJson(body, StationsFeed::class.java)
runOnUiThread {
recyclingView_Main.adapter = MainAdapter()
}
println(body)
}
}
})
}
}
class StationsFeed(val data: List<Data>)
class Data(val _id: String, val name: String, val imageurl: String)
正如您从上面的代码中看到的,当我将其放在onCreate中时,它工作得很好。
因此,问题似乎是将其发送到主线程。
XML
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclingView_Main"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
</androidx.constraintlayout.widget.ConstraintLayout>
对我来说解决问题的办法是
Thread {
runOnUiThread {
binding.recyclingViewMain.adapter = MainAdapter(stationfeed)
}
}.start()
我忘记了您需要将Thread包裹在runOnUiThread周围。
(2016.3.15更新) 上周我遇到了一个奇怪的问题,我想和你讨论一下这个问题。 但是,如果我使用sendMessage(SearchHandler.Object...)而不是runOnUiThread,一切都会很顺利!! java: SearchActivity.java: 2)在运行getActivity().runonuithread()之前,首先判断getActivity()==null
我有这个问题。我试图从另一个线程更新我的< code>TextView,但它不允许。 我尝试了一堆不同的解决方案,但没有一个似乎没有帮助。在我的同时循环代码中,一直在打印“开始新循环”,但它没有从该继续。 有人能帮我找出如何从另一个线程更新吗?
需要您的帮助来理解为什么我无法使用JMX从客户端应用程序连接到服务器应用程序。我有一个正在启动JMX Bean服务器的服务器应用程序和一个试图使用JMX连接到此服务器的客户端。这两个应用程序都在Windows中的本地机器上破坏。Jema工作正常,我可以将其连接到服务器。但是在运行客户端时,它会“卡住”在线: 应用端JMX Server初始化代码: 应用程序端JMX服务器JVM参数: 我的客户端连接
如果我在windows的命令行上执行我的python脚本,它运行得很好,但是当我在bash上运行它时,它只是一直在等待另一行,但是如果我尝试其他命令,比如,它会显示:
我有一个在Tomcat7和Tomcat6中运行的web应用程序。但是当我尝试迁移到tomcat 8时,它不允许我这样做,有一些例外,比如下面这样的情况:
问题内容: 我一直在弄乱runOnUiThread方法。如果我只是在活动中创建一个方法: 我注意到该可运行对象仅运行一次。但是,这不是问题。我想知道的是,如果我完全遗漏了某些东西,并且它在后台执行了某些操作,当我多次执行该方法时,它将导致帧速率下降。 问题答案: 这是Activity.runOnUiThread(Runnable)的全文: 该方法的主体是在你的后台线程仍然执行,类mHandler