A continuación os muestro el código y alguna imagen de la aplicación en funcionamiento. En primer lugar se muestra el código correspondiente a la actividad principal.
package com.example.firstapp;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
public class MainActivity extends Activity {
private final String abc = new String("ABCDEFGHIJKLMNÑOPQRSTUVWXYZ");
private int desplazamiento = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Spinner spin1 = (Spinner)findViewById(R.id.spin1);
ArrayAdapter<CharSequence> adaptador = ArrayAdapter.createFromResource(this, R.array.desplazamientos,
android.R.layout.simple_spinner_item);
adaptador.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spin1.setAdapter(adaptador);
Button btnConvertir = (Button)findViewById(R.id.btnConvertir);
Button btnLimpiar = (Button)findViewById(R.id.btnLimpiar);
final EditText etPlano = (EditText)findViewById(R.id.etPlano);
final EditText etCifrado = (EditText)findViewById(R.id.etCifrado);
btnLimpiar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etPlano.setText("");
etCifrado.setText("");
}
});
etCifrado.setOnKeyListener(new EditText.OnKeyListener() {
@Override
public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
if (etPlano.getText().toString().compareTo("") != 0)
{
etPlano.setText("");
}
return false;
}
});
spin1.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
desplazamiento = pos;
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
desplazamiento = 0;
}
});
btnConvertir.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String textoPlano = etPlano.getText().toString();
String textoCifrado = etCifrado.getText().toString();
int txtLen = etPlano.length();
int cifrLen = etCifrado.length();
CifradorDescifradorSustitucion cifDecif = new CifradorDescifradorSustitucion(desplazamiento);
if ((txtLen != 0) || (cifrLen !=0))
{
if (txtLen > 0)
{
String contenidoCifrado = cifDecif.cifrar(textoPlano);
etCifrado.setText(contenidoCifrado);
}
else
{
String contenidoPlano = cifDecif.descifrar(textoCifrado);
etPlano.setText(contenidoPlano);
}
}
}
});
}
}
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
public class MainActivity extends Activity {
private final String abc = new String("ABCDEFGHIJKLMNÑOPQRSTUVWXYZ");
private int desplazamiento = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Spinner spin1 = (Spinner)findViewById(R.id.spin1);
ArrayAdapter<CharSequence> adaptador = ArrayAdapter.createFromResource(this, R.array.desplazamientos,
android.R.layout.simple_spinner_item);
adaptador.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spin1.setAdapter(adaptador);
Button btnConvertir = (Button)findViewById(R.id.btnConvertir);
Button btnLimpiar = (Button)findViewById(R.id.btnLimpiar);
final EditText etPlano = (EditText)findViewById(R.id.etPlano);
final EditText etCifrado = (EditText)findViewById(R.id.etCifrado);
btnLimpiar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etPlano.setText("");
etCifrado.setText("");
}
});
etCifrado.setOnKeyListener(new EditText.OnKeyListener() {
@Override
public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
if (etPlano.getText().toString().compareTo("") != 0)
{
etPlano.setText("");
}
return false;
}
});
spin1.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
desplazamiento = pos;
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
desplazamiento = 0;
}
});
btnConvertir.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String textoPlano = etPlano.getText().toString();
String textoCifrado = etCifrado.getText().toString();
int txtLen = etPlano.length();
int cifrLen = etCifrado.length();
CifradorDescifradorSustitucion cifDecif = new CifradorDescifradorSustitucion(desplazamiento);
if ((txtLen != 0) || (cifrLen !=0))
{
if (txtLen > 0)
{
String contenidoCifrado = cifDecif.cifrar(textoPlano);
etCifrado.setText(contenidoCifrado);
}
else
{
String contenidoPlano = cifDecif.descifrar(textoCifrado);
etPlano.setText(contenidoPlano);
}
}
}
});
}
}
En segundo lugar se muestra el código de la clase dónde se implementa el cifrado y descifrado mediante el método César.
package com.example.firstapp;
public class CifradorDescifradorSustitucion {
private final String abc = new String("ABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789");
private int desplazamiento;
private String textoPlano;
private String textoCifrado;
public CifradorDescifradorSustitucion() {
desplazamiento = 0;
}
public CifradorDescifradorSustitucion(int desplazamiento) {
this.desplazamiento = desplazamiento;
}
public String descifrar(String textoCifrado) {
char caracterCifrado = ' ';
char caracterPlano = ' ';
textoCifrado = textoCifrado.toUpperCase();
StringBuilder textoPlano = new StringBuilder(textoCifrado.length());
for (int i = 0; i < textoCifrado.length(); i++) {
caracterCifrado = textoCifrado.charAt(i);
if (abc.contains(String.valueOf(caracterCifrado))) {
int posCaracterCifrado = abc.indexOf(caracterCifrado);
int posCaracterPlano = ((posCaracterCifrado - desplazamiento) + (abc
.length() + 1)) % (abc.length());
caracterPlano = abc.charAt(posCaracterPlano);
} else {
caracterPlano = caracterCifrado;
}
textoPlano.append(caracterPlano);
}
return textoPlano.toString();
}
public String cifrar(String textoPlano) {
char caracterCifrado = ' ';
char caracterPlano = ' ';
textoPlano = textoPlano.toUpperCase();
StringBuilder textoCifrado = new StringBuilder(textoPlano.length());
for (int i = 0; i < textoPlano.length(); i++) {
caracterPlano = textoPlano.charAt(i);
if (abc.contains(String.valueOf(caracterPlano))) {
int posCaracterPlano = abc.indexOf(caracterPlano);
int posCaracterCifrado = (posCaracterPlano + desplazamiento)
% (abc.length());
caracterCifrado = abc.charAt(posCaracterCifrado);
} else {
caracterCifrado = caracterPlano;
}
textoCifrado.append(caracterCifrado);
}
return textoCifrado.toString();
}
public int getDesplazamiento() {
return desplazamiento;
}
public void setDesplazamiento(int desplazamiento) {
this.desplazamiento = desplazamiento;
}
public String getTextoPlano() {
return textoPlano;
}
public void setTextoPlano(String textoPlano) {
this.textoPlano = textoPlano;
}
public String getTextoCifrado() {
return textoCifrado;
}
public void setTextoCifrado(String textoCifrado) {
this.textoCifrado = textoCifrado;
}
}
public class CifradorDescifradorSustitucion {
private final String abc = new String("ABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789");
private int desplazamiento;
private String textoPlano;
private String textoCifrado;
public CifradorDescifradorSustitucion() {
desplazamiento = 0;
}
public CifradorDescifradorSustitucion(int desplazamiento) {
this.desplazamiento = desplazamiento;
}
public String descifrar(String textoCifrado) {
char caracterCifrado = ' ';
char caracterPlano = ' ';
textoCifrado = textoCifrado.toUpperCase();
StringBuilder textoPlano = new StringBuilder(textoCifrado.length());
for (int i = 0; i < textoCifrado.length(); i++) {
caracterCifrado = textoCifrado.charAt(i);
if (abc.contains(String.valueOf(caracterCifrado))) {
int posCaracterCifrado = abc.indexOf(caracterCifrado);
int posCaracterPlano = ((posCaracterCifrado - desplazamiento) + (abc
.length() + 1)) % (abc.length());
caracterPlano = abc.charAt(posCaracterPlano);
} else {
caracterPlano = caracterCifrado;
}
textoPlano.append(caracterPlano);
}
return textoPlano.toString();
}
public String cifrar(String textoPlano) {
char caracterCifrado = ' ';
char caracterPlano = ' ';
textoPlano = textoPlano.toUpperCase();
StringBuilder textoCifrado = new StringBuilder(textoPlano.length());
for (int i = 0; i < textoPlano.length(); i++) {
caracterPlano = textoPlano.charAt(i);
if (abc.contains(String.valueOf(caracterPlano))) {
int posCaracterPlano = abc.indexOf(caracterPlano);
int posCaracterCifrado = (posCaracterPlano + desplazamiento)
% (abc.length());
caracterCifrado = abc.charAt(posCaracterCifrado);
} else {
caracterCifrado = caracterPlano;
}
textoCifrado.append(caracterCifrado);
}
return textoCifrado.toString();
}
public int getDesplazamiento() {
return desplazamiento;
}
public void setDesplazamiento(int desplazamiento) {
this.desplazamiento = desplazamiento;
}
public String getTextoPlano() {
return textoPlano;
}
public void setTextoPlano(String textoPlano) {
this.textoPlano = textoPlano;
}
public String getTextoCifrado() {
return textoCifrado;
}
public void setTextoCifrado(String textoCifrado) {
this.textoCifrado = textoCifrado;
}
}
Por último se puede ver el código xml correspondiente al layout (muy sencillo como ya comenté anteriormente).
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Spinner
android:id="@+id/spin1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/textView3"
android:layout_below="@+id/textView1" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="@string/titulo_spin1" />
<EditText
android:id="@+id/etPlano"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView2"
android:ems="10"
android:hint="Texto plano aquí..."
android:lines="4" >
<requestFocus />
</EditText>
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/etCifrado"
android:layout_below="@+id/etPlano"
android:layout_marginTop="45dp"
android:text="@string/texto_cifrado" />
<EditText
android:id="@+id/etCifrado"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/etPlano"
android:layout_below="@+id/textView3"
android:ems="10"
android:hint="Texto cifrado aquí..."
android:lines="4" />
<Button
android:id="@+id/btnConvertir"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/etCifrado"
android:layout_below="@+id/etCifrado"
android:layout_marginTop="17dp"
android:layout_toRightOf="@+id/textView3"
android:text="@string/convertir" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/spin1"
android:layout_below="@+id/spin1"
android:text="@string/texto_plano" />
<Button
android:id="@+id/btnLimpiar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/btnConvertir"
android:layout_alignBottom="@+id/btnConvertir"
android:layout_alignLeft="@+id/etCifrado"
android:text="Limpiar" />
</RelativeLayout>
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Spinner
android:id="@+id/spin1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/textView3"
android:layout_below="@+id/textView1" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="@string/titulo_spin1" />
<EditText
android:id="@+id/etPlano"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView2"
android:ems="10"
android:hint="Texto plano aquí..."
android:lines="4" >
<requestFocus />
</EditText>
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/etCifrado"
android:layout_below="@+id/etPlano"
android:layout_marginTop="45dp"
android:text="@string/texto_cifrado" />
<EditText
android:id="@+id/etCifrado"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/etPlano"
android:layout_below="@+id/textView3"
android:ems="10"
android:hint="Texto cifrado aquí..."
android:lines="4" />
<Button
android:id="@+id/btnConvertir"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/etCifrado"
android:layout_below="@+id/etCifrado"
android:layout_marginTop="17dp"
android:layout_toRightOf="@+id/textView3"
android:text="@string/convertir" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/spin1"
android:layout_below="@+id/spin1"
android:text="@string/texto_plano" />
<Button
android:id="@+id/btnLimpiar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/btnConvertir"
android:layout_alignBottom="@+id/btnConvertir"
android:layout_alignLeft="@+id/etCifrado"
android:text="Limpiar" />
</RelativeLayout>
me marca error en el array en verdad son todas la cases y layouts
ResponderEliminara mi también me marca error, pudiste resolverlo?
Eliminarde verdad necesito ayuda, me marca error al principio del código con el array, qué debo hacer?
ResponderEliminarEsta buscando esta aplicación, hace poco descargue una pero no fue compatible para mi android, ahora me recomendaron esta aplicación y espero que si funcione, aunque mi amigo tiene el mismo teléfono y le funciona a la perfección. Gracias por el paso a paso.
ResponderEliminarFuente: www.descargarplaystore.com
Ha quedado viejo el tutorial este, de igual manera, Android sigue mas fuerte que nunca y su mejor
ResponderEliminaraplicación es la Play Store con todos los juegos, apps, pelis y libros!