|
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 |
|
Herramientas |
#1
|
||||
|
||||
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) } Código:
fun CreatePDF() { var intent: Intent? = null DatosChofer.add("8. Apellidos y nombre: " + intent.getStringExtra("Nombre")) Código:
8. Apellidos y nombre: null Última edición por Merche300 Día 19/05/18 a las 09:29:37. |
|
#2
|
||||
|
||||
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!
|
Gracias de parte de: | ||
#3
|
||||
|
||||
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. |
#4
|
||||
|
||||
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!
|
Gracias de parte de: | ||
#5
|
||||
|
||||
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) } } 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() } } } } 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"/> Código:
8. Apellidos y nombre: null |
#6
|
||||
|
||||
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!
|
Gracias de parte de: | ||
#7
|
||||
|
||||
|
#8
|
||||
|
||||
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!
|
Gracias de parte de: | ||
#9
|
||||
|
||||
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.
|
#10
|
||||
|
||||
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. |
Gracias de parte de: | ||
#11
|
||||
|
||||
Entonces lo dejo así, en el onCreate
|
Estás aquí | ||||||
|