在我的应用程序中,我有一些EditText用户可以填写并点击保存,它将保存这些详细信息。我还有一个按钮,打开一个空白画布供用户登录(数字签名)。然后,当用户选择保存时,图像显示在ImageView中,最后用户可以再次点击保存以保存带有图像的表单。所有这一切都有效,但只要用户选择保存以保存表单,应用程序就会崩溃并出现以下错误:
java.lang.NumberFormatException: Invalid int: "android.widget.ImageView$ImageViewBitmapDrawable@efa14f0"
at java.lang.Integer.invalidInt(Integer.java:138)
at java.lang.Integer.parse(Integer.java:410)
at java.lang.Integer.parseInt(Integer.java:367)
at java.lang.Integer.parseInt(Integer.java:334)
at com.pta.sign.form.CreateFormActivity.persistPerson(CreateFormActivity.java:413)
at com.pta.sign.form.CreateFormActivity.onClick(CreateFormActivity.java:245)
at android.view.View.performClick(View.java:5697)
at android.widget.TextView.performClick(TextView.java:10814)
at android.view.View$PerformClick.run(View.java:22526)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
这是我使用的代码: 的 FormDBHelper.class
public static final String USER_SIGNATURE = "signature";
....
USER_SIGNATURE + " BLOB, " +
....
public boolean insertPerson(String customername,
......
byte customersign, int
jobnumber) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(NAME_CUSTOMER, customername);
....
contentValues.put(USER_SIGNATURE, customersign);
contentValues.put(USER_JOB_NUMBER, jobnumber);
db.insert(PERSON_TABLE_NAME, null, contentValues);
return true;
}
public boolean updatePerson(Integer id,
String customername,
....
byte customersign,
int jobnumber) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(NAME_CUSTOMER, customername);
....
contentValues.put(USER_SIGNATURE, customersign);
contentValues.put(PERSON_JOB_NUMBER, jobnumber);
db.update(PERSON_TABLE_NAME, contentValues, PERSON_COLUMN_ID + " = ? ", new String[]{Integer.toString(id)});
return true;
}
然后在我的 CreateFormActivity.class
中private FormDBHelper dbHelper;
EditText nameCustomer;
....
ImageView signatureImage;
Button saveButton;
LinearLayout buttonLayout;
Button editButton, deleteButton;
int personID;
.....
nameCustomer = (EditText) findViewById(R.id.editCustName);
....
signatureImage = (ImageView) findViewById(R.id.custimagesig);
....
dbHelper = new FormDBHelper(this);
if (personID > 0) {
saveButton.setVisibility(View.GONE);
buttonLayout.setVisibility(View.VISIBLE);
rs = dbHelper.getPerson(personID);
rs.moveToFirst();
String customerName = rs.getString(rs.getColumnIndex(FormDBHelper.NAME_CUSTOMER));
....
byte[] custsign = rs.getBlob(rs.getColumnIndex(FormDBHelper.USER_SIGNATURE));
int personAge = rs.getInt(rs.getColumnIndex(FormDBHelper.PERSON_JOB_NUMBER));
if (!rs.isClosed()) {
rs.close();
}
nameCustomer.setText(customerName);
nameCustomer.setFocusable(false);
nameCustomer.setClickable(false);
....
signatureImage.setImageBitmap(bitmap);
signatureImage.setFocusable(false);
signatureImage.setClickable(false);
.....
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.saveButton:
persistPerson(); **This is where is crashes (245)**
return;
case R.id.editButton:
saveButton.setVisibility(View.VISIBLE);
buttonLayout.setVisibility(View.GONE);
nameCustomer.setEnabled(true);
nameCustomer.setFocusableInTouchMode(true);
nameCustomer.setClickable(true);
....
signatureImage.setEnabled(false);
signatureImage.setFocusableInTouchMode(true);
signatureImage.setClickable(false);
......
public void persistPerson() {
if (personID > 0) {
if (dbHelper.updatePerson(
personID,
nameCustomer.getText().toString(),
....
(byte) Integer.parseInt(signImage.getDrawable().toString()),
....
Integer.parseInt(jobEditText.getText().toString()))) {
Toast.makeText(getApplicationContext(), "Form Update Successful", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getApplicationContext(), FragmentJob.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
} else {
Toast.makeText(getApplicationContext(), "Form Update Failed", Toast.LENGTH_SHORT).show();
}
} else {
if (dbHelper.insertPerson(
nameCustomer.getText().toString(),
....
(byte) Integer.parseInt(signImage.getDrawable().toString()), **this is where it crashes (413)**
Integer.parseInt(jobEditText.getText().toString()))) {
Toast.makeText(getApplicationContext(), "Form Inserted", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "Could not Insert Form", Toast.LENGTH_SHORT).show();
}
Intent intent = new Intent(getApplicationContext(), FragmentFormJob.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
}
这是我的代码(在同一个类中),用户点击按钮创建他们的签名:
Button.OnClickListener onButtonClick = new Button.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(CreateFormActivity.this, CaptureUserSig.class);
startActivityForResult(i, 0);
}
};
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if (resultCode == 1) {
Bitmap b = BitmapFactory.decodeByteArray(
data.getByteArrayExtra("byteArray"), 0,
data.getByteArrayExtra("byteArray").length);
signatureImage.setImageBitmap(Bitmap.createScaledBitmap(b, 512, 512, false));
}
}
}
AFAIK这应该有效,除非我在某个地方犯了一个错误。但对于我的生活,我似乎无法弄明白。