如果可能的话,我如何重构这个android方法以使其更好或更简洁,看起来我不能使用像ArrayList这样的集合对象,因为所有的参数都不是一种类型,有多种类型如String,浮点数和int。
所以这需要制作一个自定义的java函数,但这看起来不值得付出努力。并且有15个不同的表需要15个自定义对象。
一般知识中的一些内容会表明方法中的参数太多超过4或5.不确定为什么这是普遍接受的思维方式。如果这是真的,我的java方法需要理发真的很糟糕。或者更糟糕的是灌肠。
任何想法?
public void insertNewRowInspectionPlan(int testOneInput, String testTwoInput,
int testThreeInput, float testFourInput, int TestFiveInput, int testSixInput,
int testSevenInput, int testEightInput, int TestNineInput, float testTenInput,
int testElevenInput, String testTwelveInput){
ContentValues contentValues = new ContentValues();
contentValues.put(COLUMN_1, testOneInput);
contentValues.put(COLUMN_2, testTwoInput);
contentValues.put(COLUMN_3, testTheeInput);
contentValues.put(COLUMN_4, testFourInput);
contentValues.put(COLUMN_5, testFiveInput);
contentValues.put(COLUMN_6, testSixInput);
contentValues.put(COLUMN_7, testSevenInput);
contentValues.put(COLUMN_8, testEightInput);
contentValues.put(COLUMN_9, testNineInput);
contentValues.put(COLUMN_10, testTenInput);
contentValues.put(COLUMN_11, testElevenInput);
contentValues.put(COLUMN_12, testTwelveInput);
sqLiteDatabase.insert(INSPECTION_PLAN_TRANSACTION, null, contentValues);
}
答案 0 :(得分:1)
使用get set方法创建一个测试类,然后你不必在函数中传递那么多参数,你可以直接引用该类的引用变量
Example:
public class PropertiesContacts {
int _id;
String _title;
String _description ;
public int getID(){
return this._id;
}
public void setID(int id){
this._id = id;
}
public String gettitle(){
return this._title;
}
public void settitle(String title){
this._title = title;
}
public String getdescription (){
return this._description ;
}
public void setdescription (String description ){
this._description = description ;
}
}
Set properties value in activity
Like
PropertiesContacts obj=new PropertiesContacts ();
obj._id=1;
obj._title ="amit";
obj._description ="test";
insertNewRowInspectionPlan(obj);
Hope you will understan
答案 1 :(得分:1)
您可以考虑创建一个实例变量反映表结构的类。您只需传递表示表中一行的Java对象,而不是传递15个方法参数。因此,假设该表名为InspectionPlan
,您的方法看起来大致如下:
public void insertNewRowInspectionPlan(InspectionPlan inspectionPlan) {
ContentValues contentValues = new ContentValues();
contentValues.put(COLUMN_1, inspectionPlan.getTestOneInput());
// So on, so forth
sqLiteDatabase.insert(INSPECTION_PLAN_TRANSACTION, null, contentValues);
}
这仍然是相当多的工作,因为您手动必须将每个列从Java InspectionPlan
对象复制到ContentValues
对象。通过使用某种ORM (Object-Relational Mapping)可以避免这种情况。在Android上,您可以考虑OrmLite,但也可能有其他选项。
答案 2 :(得分:1)
当我处理这种代码时,我将这些参数作为一个单独的类提取出来,并在该类中提供了一种返回ContentValues
数据结构的方法。类似的东西:
public class DaoDataClass {
private int testOneInput, testThreeInput, TestFiveInput, testSixInput, testSevenInput, testEightInput, TestNineInput, testElevenInput;
private float testFourInput, testTenInput;
private String testTwoInput, testTwelveInput;
public ContentValues getContentValues() {
ContentValues contentValues = new ContentValues();
contentValues.put(COLUMN_1, testOneInput);
contentValues.put(COLUMN_2, testTwoInput);
contentValues.put(COLUMN_3, testTheeInput);
contentValues.put(COLUMN_4, testFourInput);
contentValues.put(COLUMN_5, testFiveInput);
contentValues.put(COLUMN_6, testSixInput);
contentValues.put(COLUMN_7, testSevenInput);
contentValues.put(COLUMN_8, testEightInput);
contentValues.put(COLUMN_9, testNineInput);
contentValues.put(COLUMN_10, testTenInput);
contentValues.put(COLUMN_11, testElevenInput);
contentValues.put(COLUMN_12, testTwelveInput);
return contentValues;
}
/**
* Getters and setters below
* */
}
现在,无论谁调用SQLite持久性,最初都会创建一个DaoDataClass
对象,并且您的代码将转换为:
public void insertNewRowInspectionPlan(DaoDataClass dataObject) {
ContentValues contentValues = dataObject.getContentValues();
sqLiteDatabase.insert(INSPECTION_PLAN_TRANSACTION, null, contentValues);
}