Ich versuche, das Captcha in meinem Registrierungsformular zu überprüfen, das im Projekt aus einer Java-Datei statisch generiert wird. Aber ich kann die Bedingung nicht zurückverfolgen, um das Captcha zu überprüfen, die ganze Zeit, die es falsch zeigt. Ob Captchabegriff oder nicht, es zeigt immer ein ungültiges Captcha an. Unten ist der Code.was wird die Bedingung sein, um captcha zu überprüfen
mainactivity.java
Submit_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//isValidData();
if (isValidData()){
if (textCaptcha.checkAnswer(Usercapt.getText().toString().trim())) {
/*AlertDialog.Builder alt = new AlertDialog.Builder(MainActivity.this);
alt.setMessage("Invalid Captcha");
alt.setCancelable(true);
alt.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alertDialog = alt.create();
alertDialog.show();*/
Toast.makeText(MainActivity.this, "captch match", Toast.LENGTH_SHORT).show();
} else{
/* Toast.makeText(MainActivity.this, "Successful Registration", Toast.LENGTH_SHORT).show();
Intent i = new Intent(MainActivity.this, Login_Activity.class);
startActivity(i);*/
Toast.makeText(MainActivity.this, "captcha not match", Toast.LENGTH_SHORT).show();
}
} else {
/*here the code to save the data in data base will be written*/
Toast.makeText(MainActivity.this, "Registration Failed, Register again", Toast.LENGTH_SHORT).show();
}
}
});
Captcha.java
package com.mws.tms_application;
import android.graphics.Bitmap;
import android.graphics.Color;
import java.util.List;
import java.util.Random;
public abstract class Captcha {
protected Bitmap image;
protected String answer = "";
private int width;
protected int height;
protected int x = 0;
protected int y = 0;
protected static List usedColors ;
protected abstract Bitmap image();
public static int color(){
Random r = new Random();
int number;
do{
number = r.nextInt(9);
}while(usedColors.contains(number));
usedColors.add(number);
switch(number){
case 0: return Color.BLACK;
case 1: return Color.BLUE;
case 2: return Color.CYAN;
case 3: return Color.DKGRAY;
case 4: return Color.GRAY;
case 5: return Color.GREEN;
case 6: return Color.MAGENTA;
case 7: return Color.RED;
case 8: return Color.YELLOW;
case 9: return Color.WHITE;
default: return Color.WHITE;
}
}
public int getWidth(){
return this.width;
}
public void setWidth(int width){
if(width > 0 && width < 10000){
this.width = width;
}else{
this.width = 300;
}
}
public int getHeight(){
return this.height;
}
public void setHeight(int height){
if(height > 0 && height < 10000){
this.height = height;
}else{
this.height = 100;
}
}
public Bitmap getImage() {
return this.image;
}
public boolean checkAnswer(String ans) {
/*System.out.println("ans received here"+ans);
System.out.println("captcha"+answer);*/
return (ans.equals(this.answer));
}
}
textcaptcha.java
package com.mws.tms_application;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Shader;
import java.io.CharArrayWriter;
import java.util.ArrayList;
import java.util.Random;
public class TextCaptcha extends Captcha {
protected TextOptions options;
private int wordLength;
private char mCh;
public enum TextOptions {
UPPERCASE_ONLY,
LOWERCASE_ONLY,
NUMBERS_ONLY,
LETTERS_ONLY,
NUMBERS_AND_LETTERS
}
public TextCaptcha(int wordLength, TextOptions opt) {
new TextCaptcha(0, 0, wordLength, opt);
}
public TextCaptcha(int width, int height, int wordLength, TextOptions opt) {
setHeight(height);
setWidth(width);
this.options = opt;
usedColors = new ArrayList<>();
this.wordLength = wordLength;
this.image = image();
}
@Override
protected Bitmap image() {
LinearGradient gradient = new LinearGradient(0, 0, getWidth()/this.wordLength, getHeight()/2, color(), color(), Shader.TileMode.CLAMP);
Paint p = new Paint();
p.setDither(true);
p.setShader(gradient);
Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bitmap);
c.drawRect(0, 0, getWidth(), getHeight(), p);
Paint tp = new Paint();
tp.setDither(true);
tp.setTextSize(getWidth()/getHeight() * 20);
Random r = new Random(System.currentTimeMillis());
CharArrayWriter cab = new CharArrayWriter();
this.answer = " ";
for (int i = 0; i < this.wordLength; i++) {
char ch = ' ';
switch (options) {
case UPPERCASE_ONLY:
ch = (char) (r.nextInt(91 - 65) + (65));
break;
case LOWERCASE_ONLY:
ch = (char) (r.nextInt(123 - 97) + (97));
break;
case NUMBERS_ONLY:
ch = (char) (r.nextInt(58 - 49) + (49));
break;
case LETTERS_ONLY:
ch = getLetters(r);
break;
case NUMBERS_AND_LETTERS:
ch = getLettersNumbers(r);
break;
default:
ch = getLettersNumbers(r);
break;
}
cab.append(ch);
this.answer += ch;
}
char[] data = cab.toCharArray();
for (int i = 0; i < data.length; i++) {
this.x += (30 - (3 * this.wordLength)) + (Math.abs(r.nextInt()) % (65 - (1.2 * this.wordLength)));
this.y = 50 + Math.abs(r.nextInt()) % 50;
Canvas cc = new Canvas(bitmap);
tp.setTextSkewX(r.nextFloat() - r.nextFloat());
tp.setColor(color());
cc.drawText(data, i, 1, this.x, this.y, tp);
tp.setTextSkewX(0);
}
return bitmap;
}
private char getLetters(Random r) {
int rint = (r.nextInt(123 - 65) + (65));
if (((rint > 90) && (rint < 97)))
getLetters(r);
else
mCh = (char) rint;
return mCh;
}
private char getLettersNumbers(Random r) {
int rint = (r.nextInt(123 - 49) + (49));
if (((rint > 90) && (rint < 97)))
getLettersNumbers(r);
else if (((rint > 57) && (rint < 65)))
getLettersNumbers(r);
else
mCh = (char) rint;
return mCh;
}
}
zu initialisieren, wo Sie asigned Wert – Anil
antworten es wird von einer anderen Java-Datei generiert –
enthält es Buchstaben? oder Zahlen nur die "Antwort"? – Yazan