2
respostas

Cannot infer a type for this parameter. Please specify it explicitly.

O bug que eu encontrei se refere ao projeto do curso Android com Kotlin: comunicação com Web API

no arquivo, NotaWebClient.kt refente a linha, mais especificamente no atributo notaResposta

notasResposta.map { notaResposta -> notaResposta.nota }

o erro é Cannot infer a type for this parameter. Please specify it explicitly. Não é possível inferir um tipo para este parâmetro. Por favor, especifique-o explicitamente.

aqui está o código completo

private const val TAG = "NotaWebClient" class NotaWebClient { private val notaService: NotaService = RetrofitInicializador().notaService suspend fun buscaTodas(): List? { return try { val notasResposta = notaService.buscaTodas() notasResposta.map { notaResposta -> notaResposta.nota } } catch (e: Exception) { Log.e(TAG, "buscaTodas: ", e) null } }

suspend fun salva(nota: Nota): Boolean {
    try {
        val resposta = notaService.salva(nota.id, NotaRequisicao(
            titulo = nota.titulo,
            descricao = nota.descricao,
            imagem = nota.imagem
        ))
        return resposta.isSuccessful
    } catch (e: Exception) {
        Log.e(TAG, "salva: falha ao tentar salvar", e)
    }
    return false
}

suspend fun remove(id: String): Boolean {
    try {
        notaService.remove(id)
        return true
    } catch (e: Exception) {
        Log.e(TAG, "remove: falha ao tentar remover nota", e)
    }
    return false
}

}

2 respostas

Olá, Isaque!

Parece que o compilador Kotlin não está conseguindo inferir o tipo do objeto notaResposta no seu código. Isso pode acontecer quando o tipo de retorno da função buscaTodas() do notaService não está claramente definido.

No seu código, a função buscaTodas() está retornando um objeto notasResposta. Você está tentando mapear esse objeto para notaResposta.nota, mas o compilador não consegue determinar o tipo de notaResposta.

Para resolver isso, você precisa especificar o tipo de notaResposta explicitamente. Aqui está um exemplo de como você pode fazer isso:

val notasResposta = notaService.buscaTodas()
notasResposta.map { notaResposta: TipoDoObjeto ->
    notaResposta.nota
}

No lugar de TipoDoObjeto, você deve colocar o tipo real do objeto que a função buscaTodas() retorna. Se buscaTodas() retorna uma lista de objetos NotaResposta, por exemplo, o código ficaria assim:

val notasResposta = notaService.buscaTodas()
notasResposta.map { notaResposta: NotaResposta ->
    notaResposta.nota
}

Por favor, substitua TipoDoObjeto e NotaResposta pelo tipo correto que a função buscaTodas() retorna.

Espero ter ajudado e bons estudos!

O app está crashando quando aperto o botão para criar uma nova nota.

foto do projeto

Sou iniciante e confesso que estou meio confuso sobre este código. Fiz o sistema conforme as aulas e de acordo como o professor construiu.. O compilador / IDE está atualizado e reconheceu, compilou sem nenhum problema o código e até abriu o emulador, agradeço a sua ajuda. porém o app ainda não funciona corretamente como deveria. Seria bom reinstalar a IDE caso seja esse um dos problemas ?

PS: É somente essa linha, só uma que me deu um problema "Crônico" e que está me impedindo de progredir nos estudos.

aqui está o código do professor:

class NotaWebClient {

    private val notaService: NotaService =
        RetrofitInicializador().notaService

    suspend fun buscaTodas(): List<Nota>? {
        return try {
            val notasResposta = notaService
                .buscaTodas()
            notasResposta.map { notaResposta ->
                notaResposta.nota
            }
        } catch (e: Exception) {
            Log.e(TAG, "buscaTodas: ", e)
            null
        }
    }

aqui está o código que corrigi:

class NotaWebClient {
    private val notaService: NotaService =
        RetrofitInicializador().notaService
    suspend fun buscaTodas(): List<Nota>? {
        return try {
            val notasResposta = notaService.buscaTodas()
            notasResposta.map { notaResposta: NotaResposta ->
                notaResposta.nota
            }
        } catch (e: Exception) {
            Log.e(TAG, "buscaTodas: ", e)
            null
        }
    }

Ambos não funcionam!

Gostaria muito de terminar este projeto para enfim poder personaliza-lo e incrementar novas funcionalidades, dessa forma corroborando para o meu crescimento intelectual.

Grato!