Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 08/04/18, 17:31:05
Array

[xs_avatar]
Merche300 Merche300 no está en línea
Betatester oficial
 
Fecha de registro: dic 2008
Localización: Valencia
Mensajes: 625
Modelo de smartphone: NEXUS 5 - ONEPLUS 3
Tu operador: Pepephone
getIntent()

Tengo este metodo en una activity

Código:
class CActividades : AppCompatActivity()

fun Pdf(v: View) {
    val intent = Intent(this, Pdf::class.java)

    intent.putExtra("Nombre", textViewNombre !!.text.toString())

    startActivity(intent)
}
y lo que quiero es pasar estos datos a otra actividad en la cual creo un pdf pero me devuelve null, si me crea el el texto que añado pero no el dato que espero recibir

Código:
fun CreatePDF() {
var intent: Intent? = null
DatosChofer.add("8. Apellidos y nombre: " + intent.getStringExtra("Nombre"))
Esto es lo que me sale

Código:
8. Apellidos y nombre: null
¿Como es esto posible?

Última edición por Merche300 Día 19/05/18 a las 09:29:37.
Responder Con Cita


  #2  
Viejo 09/04/18, 10:22:32
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,202
Tu operador: -

Muy buenas, supongo que has pegado mal el código porque según está te daría una NullPointerException (por el var intent: Intent? = null que lo usas en la siguiente línea, ¿dónde llamas al getIntent()?).

En Kotlin de hecho ni siquiera hace falta llamar al getIntent() explícitamente o almacenarlo en una variable porque Kotlin suele exponer los métodos del tipo getPatata() como patata. Basta llamar a intent.getStringExtra("loquesea"), no tienes que declarar la variable antes.

Me aseguraría también de que textViewNombre !!.text.toString() tiene el valor que necesitas, según está no creo que pueda valer null pero por si acaso.

Y también me aseguraría de que ese CreatePDF() se llama desde la actividad que recibe el intent y no desde otro sitio. ¿Lo llamas en el onCreate de la clase Pdf o dónde?

Por cierto, permíteme algunas sugerencias:
- usar nombres significativos que no te líen (tener una función que se llama Pdf y una clase que se llama Pdf no ayuda a la hora de comprender el código)
- escribir los nombres de métodos o funciones con la primera minúscula (es una convención del mundo Java/Kotlin) y los nombres de clases con la primera mayúscula.
- Los textos escritos a mano mejor guardarlos en una variable y referenciarla en el código en vez de copiar y pegar texto o volverlo a escribir. Si escribes en dos sitios "Nombre" igual en uno te equivocas y pones "Nobmre" y no te das cuenta y no funciona. Además del rollete que supone cambiar algo si decides renombrarlo.
- acostumbrarse a usar val en vez de var, Kotlin y en general los lenguajes funcionales animan a hacer uso de la inmutabilidad de modo que se tenga la certeza de que las variables tienen un valor y no va a estar cambiando.

Vaya tocho ha salido jaja, espero que alguna de esas ideas te funcione
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 09/04/18, 13:48:59
Array

[xs_avatar]
Merche300 Merche300 no está en línea
Betatester oficial
 
Fecha de registro: dic 2008
Localización: Valencia
Mensajes: 625
Modelo de smartphone: NEXUS 5 - ONEPLUS 3
Tu operador: Pepephone
intent.getStringExtra("Nombre"))

intent me sale en rojo

getIntent() me sale deprecated

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_pdf)

verifyStoragePermissions(this)

CreatePDF()
}

Última edición por Merche300 Día 09/04/18 a las 18:53:25.
Responder Con Cita
  #4  
Viejo 10/04/18, 07:54:45
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,202
Tu operador: -

Lo único que he leído acerca de un getIntent deprecated es que lo estés llamando desde un fragment y no desde una activity. ¿Ese onCreate que pones en qué clase está y de qué tipo es?
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
Gracias de parte de:
  #5  
Viejo 14/04/18, 09:08:24
Array

[xs_avatar]
Merche300 Merche300 no está en línea
Betatester oficial
 
Fecha de registro: dic 2008
Localización: Valencia
Mensajes: 625
Modelo de smartphone: NEXUS 5 - ONEPLUS 3
Tu operador: Pepephone
 Cita: Originalmente Escrito por mocelet Ver Mensaje
Lo único que he leído acerca de un getIntent deprecated es que lo estés llamando desde un fragment y no desde una activity. ¿Ese onCreate que pones en qué clase está y de qué tipo es?
El activity que envia los datos, ressumido:

El getData() es el que me trae el nombre, en la app funciona correctamente

Código:
class CActividades : AppCompatActivity(), View.OnClickListener, AdapterView.OnItemSelectedListener {
    
    var textViewNombre: TextView? = null   

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.c_actividades)

        textViewNombre = findViewById(R.id.tv_nombre) as TextView
        
        getData()

    }    
   
    override fun onNothingSelected(parent: AdapterView<*>) {
        textViewNombre !!.text = ""
        
    } 

    fun pdf(v: View) {
        val intent = Intent(this, Pdf::class.java)

        intent.putExtra("Nombre", textViewNombre !!.text.toString())
        
        startActivity(intent)
    }
}
El que recibe los datos:

Código:
class Pdf : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_pdf)

        verifyStoragePermissions(this)

        createPdf()
    }

    companion object {

        // Storage Permissions
        private val REQUEST_EXTERNAL_STORAGE = 1

        private val PERMISSIONS_STORAGE = arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)

        fun verifyStoragePermissions(activity: Activity) {
            
            if (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
               
                if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {

                } else {
                    ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE)
                }
            }
        }

        fun createPdf() {

            //create document object
            val document = Document()

            //output file path
            val date = Date()
            val timeStamp = SimpleDateFormat("dd-MM-yyyy  HH:mm:ss", Locale.getDefault()).format(date)
            val dir = "${Environment.getExternalStorageDirectory()}/MyFolder"
            File(dir).mkdirs()
            val outpath = Environment.getExternalStorageDirectory().toString() + "/MyFile" +
                    File.separator + timeStamp + ".pdf"

            try {
                PdfWriter.getInstance(document, FileOutputStream(outpath))
                document.open()

                val fontCabecera = Font(Font.FontFamily.UNDEFINED, 10f, Font.BOLD, BaseColor.GRAY)
                val fontNormalNegrita = Font(Font.FontFamily.UNDEFINED, 8f, Font.BOLD)
                val fontNormalCursiva = Font(Font.FontFamily.UNDEFINED, 8f, Font.ITALIC)
                val fontNormal = Font(Font.FontFamily.UNDEFINED, 8f)
                val fontPequenya = Font(Font.FontFamily.UNDEFINED, 6f)

                //var intent: Intent? = null

                var intent = Intent()

                DatosChofer.add("8. Apellidos y nombre: " + intent.getStringExtra("F. Nacimiento"))
                DatosChofer.add(Chunk.NEWLINE)

                document.close()

            } catch (e: FileNotFoundException) {
                // TODO Auto-generated catch block
                e.printStackTrace()
            } catch (e: DocumentException) {
                // TODO Auto-generated catch block
                e.printStackTrace()
            }
        }
    }
}
El boton para abrir el activity Pdf.kt

Código:
<Button
    android:id="@+id/button_send"
    android:text="SIGUIENTE"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:layout_marginTop="20dp"
    android:onClick="pdf"/>
He de decir que el pdf se crea correctamente, lo unico es que no recibe los datos, puesto que esto es el resultado:

Código:
8. Apellidos y nombre: null
Responder Con Cita
  #6  
Viejo 14/04/18, 09:31:43
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,202
Tu operador: -

Tienes por ahí un var intent = Intent () antes de llamar al getStringExtra. El intent que necesitas es el de la actividad, no uno nuevo.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
Gracias de parte de:
  #7  
Viejo 14/04/18, 10:05:07
Array

[xs_avatar]
Merche300 Merche300 no está en línea
Betatester oficial
 
Fecha de registro: dic 2008
Localización: Valencia
Mensajes: 625
Modelo de smartphone: NEXUS 5 - ONEPLUS 3
Tu operador: Pepephone
 Cita: Originalmente Escrito por mocelet Ver Mensaje
Tienes por ahí un var intent = Intent () antes de llamar al getStringExtra. El intent que necesitas es el de la actividad, no uno nuevo.
y donde esta ese intent, esto me lleva loco ya.
Responder Con Cita
  #8  
Viejo 14/04/18, 11:53:48
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,202
Tu operador: -

Aquí:

var intent = Intent()

DatosChofer.add("8llidos y nombre: " + intent.getStringExtra("F. Nacimiento"))

Que por cierto no sé por qué ahí pone 8llidos y en el PDF te sale 8. Apellidos, será algo de copiar y pegar en el foro
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
Gracias de parte de:
  #9  
Viejo 14/04/18, 13:00:10
Array

[xs_avatar]
Merche300 Merche300 no está en línea
Betatester oficial
 
Fecha de registro: dic 2008
Localización: Valencia
Mensajes: 625
Modelo de smartphone: NEXUS 5 - ONEPLUS 3
Tu operador: Pepephone
 Cita: Originalmente Escrito por mocelet Ver Mensaje
Aquí:

var intent = Intent()

DatosChofer.add("8llidos y nombre: " + intent.getStringExtra("F. Nacimiento"))

Que por cierto no sé por qué ahí pone 8llidos y en el PDF te sale 8. Apellidos, será algo de copiar y pegar en el foro
Gracias mocelet, si es al copiar y pegar es lo del apellido, intent en rojo a no ser que antes le ponga var intent = Intent() , lo que he hecho es pasarlo dentro del onCreate y esta funcionando.
Responder Con Cita
  #10  
Viejo 14/04/18, 14:27:25
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,202
Tu operador: -

Ah, eso es que la función createPdf la tienes en el companion object no en la actividad, por eso te sale en rojo. El companion object es como el static de Java, solo puedes llamar a métodos static de la clase (y el getIntent no lo es).

De todas formas es más legible extraer los datos en el onCreate como has hecho que andar a mitad del código consultando un intent que poco tiene que ver con la funcionalidad implementada (una función cuya misión es crear PDFs no debería saber nada de intents, solo saber qué texto tiene que añadir)
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!

Última edición por mocelet Día 14/04/18 a las 14:29:51.
Responder Con Cita
Gracias de parte de:
  #11  
Viejo 14/04/18, 17:12:29
Array

[xs_avatar]
Merche300 Merche300 no está en línea
Betatester oficial
 
Fecha de registro: dic 2008
Localización: Valencia
Mensajes: 625
Modelo de smartphone: NEXUS 5 - ONEPLUS 3
Tu operador: Pepephone
Entonces lo dejo así, en el onCreate
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 18:42:09 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /