我的主活动是一个测验,每个问题都包括一个betSize值和一个potSize值。测验结束后,我将发送2个双数组,betSizeArray和potSizeArray,从主活动到结果活动,以显示在列表视图中。我在第一个活动中初始化和填充数组,并使用putExtra()将它们放入意图中。在结果活动中,我使用intent.extras?.getDoubleArray(键)检索每个数组;但是检索到的数组充满了空值。
在结果活动中。OnCreate()我第一次尝试
val betSizeArray=意图。getDoubleArrayExtra(“BET_大小”)。
每当我试图从betSizeArray访问值时,这会导致NullPointerException。
接下来我试着
val betSizeArray=额外费用?。getDoubleArray(“BET_大小”)。
必须使用安全调用“?.”来获取数组并访问数组的值(例如betSizeArray?. get(i))不会引发NullPointerException;但是从数组访问的所有值都是NULL。
我尝试在onCreate()内初始化MainActivity中的数组,但是,每当在MainActivity中使用这些数组时,这只会导致NullPointerException。
在我创建意图并调用start Active(意图)的Mainactive函数中,我尝试初始化和填充testArrayList以确保我传递给意图的数组已填充且未充满空值。然而,在ResultActive中检索到的数组仍然充满空值。我没有在以下代码中包含此测试。
var betSizeArray = arrayOfNulls<Double>(20)
var potSizeArray = arrayOfNulls<Double>(20)
var count = 0
var betSize = 1.0
var potSize = 1.0
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//here an OnKeyListener that eventually calls setNextQuestion() is created
....
}
setNextQuestion(),其中填充数组:
private fun setNextQuestion() {
//check if 20 questions have been completed
if (count < 19){
//values are added to each array
betSizeArray[count] = betSize
potSizeArray[count] = potSize
count++
...
/*new values are created for betSize and potSize for next time
this function is called*/
}
else endQuiz()
}
Endquick(),其中创建意图并调用startActivity()。
private fun endQuiz() {
val resultsIntent = Intent(applicationContext, ResultsActivity::class.java)
resultsIntent.putExtra("BET_SIZES", betSizeArray)
resultsIntent.putExtra("POT_SIZES", potSizeArray)
startActivity(resultsIntent)
}
结果活动:
class ResultsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_results)
val extras = intent.extras
val betSizeArray = extras?.getDoubleArray("BET_SIZES")
val potSizeArray = extras?.getDoubleArray("POT_SIZES")
var listData = ArrayList<String>()
var textData = ""
//this loop is where the arrays are accessed.
for( i in 0 .. 19){
textData = "$" + betSizeArray?.get(i).toString() +
" into $" + potSizeArray?.get(i).toString()
listData.add(textData)
}
val arrayAdapter = ArrayAdapter(
this,
android.R.layout.simple_list_item_1,
listData
)
resultsListView.setAdapter(arrayAdapter)
assessTextView.setText(assessment)
}
}
代码成功填充了ListView。但是,从数组访问的所有值返回为“$null”。此列表视图中的每一行内容如下:
$null变成$null
$null变成$null
...
如果一切正常,我预期的输出将如下所示:
50美元到85美元
15美元到40美元
...
其中,值是在MainActivity中生成的随机数,并通过数组和intent传递给ResultActivity。
我仍然怀疑需要初始化MainActivity的onCreate()中的数组。但只要在MainActivity中向数组添加值,就会出现错误。
谢谢你的帮助!
编辑:@Azhar92所以我刚刚在创建意图的MainActivity中尝试过:
val bundle = Bundle()
bundle.putSerializable("BET_SIZES", betSizeArray)
bundle.putSerializable("POT_SIZES", potSizeArray)
并在结果活动中:
val bundle = intent.extras
val betSizeArray = bundle?.getSerializable("BET_SIZES") as ArrayList<Double>
val potSizeArray = bundle?.getSerializable("POT_SIZES") as ArrayList<Double>
我得到了一个TypeCastException:
Caused by: kotlin.TypeCastException: null cannot be cast to non-null type kotlin.collections.ArrayList<kotlin.Double> /* = java.util.ArrayList<kotlin.Double> */
at com.example.questgen.ResultsActivity.onCreate(ResultsActivity.kt:39)
第39行是第一个getSerializable()。因此,出于某种原因,似乎正在通过intent的数组仍然为null。
val betSizeArray = bundle?.getSerializable("BET_SIZES") as Array<Double?>?
向阵列施放?相反,不会抛出错误,但数组仍填充NULL。
最终编辑:它正在工作!我将所有变量移到类标题下。将阵列初始化从arrayOfNulls更改为DoubleArray(20)。去掉了很多私有方法参数,因为我现在有了有意义且可访问的类变量。从束切换。putSerializable()到intent。putExtra()。在ResultsActivity中,我从bundle切换了。getSerializable()到intent。getDoubleArrayExtra()。我假设有某种方法可以使序列化和捆绑包工作,但这是我第一次得到结果的原因。我想你说得对,我以前在什么地方重新声明了变量。谢谢你,gmetal!
getDoubleArrayExtra将返回一个可能不包含空值的Java双[]。由于您使用arrayOfNulls方法初始化它们,因此
因此,您应该将它们读回为可序列化的值(原语类型的所有Java对象表示都是可序列化的),并将它们转换为数组
val extras = intent.extras
val betSizeArray = extras?.getSerializable("BET_SIZES") as Array<Double?>?
val potSizeArray = extras?.getSerializable("POT_SIZES") as Array<Double?>?
还要注意,ResultActivity上的betSizeArray类型将为:Serializable?,因为它可能为null(例如,不包含在捆绑包中),并且必须强制转换为所需的数组?价值
如果这不起作用,这意味着你在主要活动中没有做正确的事情。我首先移动这些变量声明:
var betSizeArray = arrayOfNulls<Double>(20)
var potSizeArray = arrayOfNulls<Double>(20)
var count = 0
var betSize = 1.0
var potSize = 1.0
在主要活动中,如下所示:
class MainActivity : AppCompatActivity() {
var betSizeArray = arrayOfNulls<Double>(20)
var potSizeArray = arrayOfNulls<Double>(20)
var count = 0
var betSize = 1.0
var potSize = 1.0
问题内容: 我正在通过一个Intent传递一个int,但是我不知道如何接收它,因为我必须从OnCreate方法中接收一个intent,但是如果我将其放置在那里,则无法将其与其余代码中的另一个int进行比较:我在这里发送意图: 在这里,我收到它: 但是在onCreate方法之后,我必须这样做: 问题答案: 您需要获取在方法中传递的数据,而不是在声明中。 另外你不发送,正在发送中。所以,你需要得到从。
我有一个数组类型的。我必须在python中通过流/TCP套接字发送它。然后我必须在接收端接收相同的阵列。
本文向大家介绍JavaScript 通过POST发送和接收JSON数据,包括了JavaScript 通过POST发送和接收JSON数据的使用技巧和注意事项,需要的朋友参考一下 示例 6 提取请求承诺最初将返回Response对象。它们将提供响应头信息,但它们不直接包含响应主体,而响应主体可能尚未加载。可以使用诸如Response对象上的方法来等待响应主体加载,然后对其进行解析。.json()
我想知道我们是否可以将2个蓝牙设备连接到Android设备,并在Android中实时共享数据?i、 e我有一个传感器连接到Android设备,我想流式传输或收听或广播从传感器接收到的数据到耳机(连接到同一个Android设备)。在Android中可能吗??请提出建议。提前谢谢。 我想通过经典蓝牙收听音频流。有可能把Android设备变成接收器吗?目前,我们使用HFP模式和经典蓝牙进行通信。 场景:
当应用程序关闭时,我在使用FCM的聊天中收到有关新消息的通知。当我点击它时,我想打开聊天活动,但主活动会打开。 点击推送通知将打开主活动。在其中,我可以从intent获得一种类型的通知,并打开另一个活动: 在我看来,这种方法既肮脏又不方便。是否可以指定单击推送通知时将打开的活动? 编辑:解决问题的步骤: > 为要打开的活动添加意图过滤器: 向FCM消息添加click_action="you-act
我试着做一个简单的服务器-客户机套接字通信,但服务器似乎无法正常工作。无论何时发送或接收,我都会收到此错误: 非插座上的插座操作:非插座上的插座操作 奇怪的是,这只会在服务器发送时出现。客户似乎还可以: