【发布时间】:2021-03-20 05:21:36
【问题描述】:
我是编程初学者!我正在尝试创建一个将在特定时间发送通知的应用程序。通知的描述必须来自先前在应用程序中定义的数组。 现在,我分部分进行:通知由 WorkManager 创建,由按钮激活。现在是 OneTimeWorkRequest。
我现在的问题是:如何获取通知以从数组中获取其描述?我尝试使用 while 循环,但它只使用数组中的第一个字符串。
我的活动代码:
class CatPicsActivity : AppCompatActivity() {
lateinit var notifBtn: MaterialButton;
lateinit var catBtn: ImageButton;
lateinit var title: String;
lateinit var catImg: ImageView;
var url: String = "https://api.thecatapi.com/v1/"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_cat_pics)
notifBtn = findViewById(R.id.botaoNotificacao);
catBtn = findViewById(R.id.catbtn);
catImg = findViewById(R.id.imgCat);
title = getResources().getString(R.string.titulo_notificacao);
notifBtn.setOnClickListener {
Log.i("WorkButton", "clicado")
val notifcWorker: OneTimeWorkRequest =
OneTimeWorkRequestBuilder<NotificationWorker>()
.build()
WorkManager.getInstance(this)
.enqueueUniqueWork(
"notification_worker",
ExistingWorkPolicy.KEEP,
notifcWorker
)
}
catBtn.setOnClickListener {
catFunction();
}
}
private fun catFunction() {
val retrofit = Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.build()
val catService: CatService = retrofit.create(CatService::class.java)
catService.randomCat().enqueue(object : Callback<List<Cat>> {
override fun onResponse(call: Call<List<Cat>>, response: Response<List<Cat>>) {
val randomCat = response.body()!!
Picasso.get()
.load(randomCat[0].url)
.into(catImg)
}
override fun onFailure(call: Call<List<Cat>>, t: Throwable) {
Toast.makeText(this@CatPicsActivity, "Deu errado! Tente novamente, por favor", Toast.LENGTH_SHORT).show()
Log.i("CatPics", "Erro: $t")
}
})
}}
我的工人阶级:
class NotificationWorker(private val context: Context, params: WorkerParameters) : Worker(context, params) {
lateinit var descricao: String
fun generateDescription (): String {
var razoes = arrayOf(
"Esta é uma notificação de teste, por favor me avise no Telegram se chegou",
"1 - ",
"2 - ",
"3 - ",
"4 - ",
"5 - ",
"6 - ",
"7 - ",
"8 - ",
"9 - ",
"10 - ",
"11 - ",
"12 - ",
"13 - ",
"14 - ",
"15 - ",
"16 - ",
"17 - ",
"18 - ",
"19 - ",
"20 - ",
"21 - ",
"22 - ",
"23 - ",
"24 - ",
"25 - ",
"26 - ",
"27 - ",
"28 - ",
"29 - ",
"30 - ")
var array = razoes
var i = 0
while(i < array.size){
descricao = array[i]
i += 1
return descricao
}
return descricao
}
var title: String = "Você recebeu uma nova mensagem!"
override fun doWork(): Result {
generateDescription()
Log.i("WorkerDescricao2", descricao)
Log.i("WorkBeforeNotification", "Trabalho criado")
NotificationUtils.createNotification(context, title, descricao)
Log.i("WorkAfterNotification", "notificação enviada")
return Result.success()
}}
那么,如何从数组“razoes”中获取“descricao”变量?
谢谢!
编辑:
我希望数组中的每个值都用于不同的通知,这些通知将在单击按钮后(或将来的每一天)发送。
【问题讨论】:
-
您的
generateDescription()函数创建了一个数组。然后它尝试遍历数组,一次将每个结果分配给descricao,但它在第一次迭代时立即返回descricao。因此,当函数完成时,descricao具有数组中第一项的值。但我不知道你想要完成什么,所以我不知道还能说什么。创建通知时,您希望显示整个文本数组,还是什么? -
@Tenfour04 感谢您的评论和回答!我想在一个通知中使用数组的每个元素。我的想法是每天 WorkManager 都会创建一个通知,并且这些通知中的每一个都基于数组的一项。现在,我只希望 WorkManager 通过单击按钮关闭。每次点击都是数组的一项。除此之外,我尝试从循环中删除返回,但它做了同样的事情,使用数组中的 [0] 创建了一个通知。
标签: android arrays kotlin notifications