/ / कर्सर स्थिति के आधार पर फ़ंक्शन कॉल का उपयोग करना - एंड्रॉइड - जावा, एंड्रॉइड, साइक्लाइट, एंड्रॉइड-कर्सर

कर्सर स्थिति के आधार पर फ़ंक्शन कॉल का उपयोग करना - एंड्रॉइड - जावा, एंड्रॉइड, साइक्लाइट, एंड्रॉइड-कर्सर

मैं वर्तमान में क्वेरी के आधार पर प्रत्येक कॉलम ले रहा हूंऔर कर्सर की वर्तमान स्थिति के आधार पर चर को संशोधित करना। मैं सोच रहा था कि क्या ऐसा करने से कोड के आकार में कटौती करना संभव होगा, जहां वर्तमान में संदर्भित किए जा रहे कर्सर के भीतर कॉलम के आधार पर एक अलग फ़ंक्शन कॉल किया जाएगा:

do {
Ticket ticket = new Ticket();
for(int i = 0; i < cursor.getColumnCount(); i++)
{
if (cursor.getString(0) != null) {
/*Where the array contains a list of function calls*/
ticket.arrayList(i);
}
}while(cursor.moveToNext());

नीचे वर्तमान में मेरे पास कोड है। जो मुझे पता है कि जावा में कुछ भी ऐसा नहीं है जो इस तरह से काम करता है, लेकिन मैं यहाँ लाइनों की संख्या में कटौती करने की कोशिश कर रहा हूँ क्योंकि मैं अंततः एक सौ स्तंभों के करीब होगा जो कर्सर में खींच लिए जाएंगे।

public List<Ticket> getTickets(Context context, SQLiteDatabase db)
{
List<Ticket> ticketInfo = new ArrayList<>();
String selectQuery = "SELECT * FROM " + TABLE_TICKET;

Cursor cursor = null;


try {
cursor = db.rawQuery(selectQuery, null);
if (cursor != null) {
try {
if (cursor.moveToFirst()) {
do {
Ticket ticket = new Ticket();
//Set the ticket number
if (cursor.getString(0) != null) {
ticket.setTicketNr(Integer.parseInt(cursor.getString(0)));
}
//Set the ticket id
if (cursor.getString(1) != null) {
ticket.setTicketId(Integer.parseInt(cursor.getString(1)));
}
//
if (cursor.getString(2) != null) {
ticket.setServiceName(cursor.getString(2));
}
//
if (cursor.getString(3) != null) {
ticket.setServiceHouseNr(Integer.parseInt(cursor.getString(3)));
}
//
if (cursor.getString(4) != null) {
ticket.setServiceDirectional(cursor.getString(4));
}
//
if (cursor.getString(5) != null) {
ticket.setServiceStreetName(cursor.getString(5));
}
//
if (cursor.getString(6) != null) {
ticket.setServiceCommunityName(cursor.getString(6));
}
//
if (cursor.getString(7) != null) {
ticket.setServiceState(cursor.getString(7));
}
//
if (cursor.getString(8) != null) {
ticket.setServiceZip1(Integer.parseInt(cursor.getString(8)));
}
//
if (cursor.getString(9) != null) {
ticket.setServiceZip2(Integer.parseInt(cursor.getString(9)));
}
//
if (cursor.getString(10) != null) {
ticket.setTroubleReported(cursor.getString(10));
}
// Adding exercise to list
if (ticket != null) {
ticketInfo.add(ticket);
}

} while (cursor.moveToNext());
} else {
//No results from query
Toast.makeText(context.getApplicationContext(), "No tickets found", Toast.LENGTH_LONG).show();
}

} finally {
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
}
}
}
catch(SQLiteException exception)//If exception is found
{
Log.d(TAG, "Error", exception);
//Display exception
Toast.makeText(context.getApplicationContext(), exception.toString(), Toast.LENGTH_LONG).show();
}

return ticketInfo;
}

इस में किसी भी अंतर्दृष्टि के लिए धन्यवाद।

उत्तर:

उत्तर № 1 के लिए 1

मुझे लगता है कि यह ऐसा करेगा। बस कर्सर को आगे बढ़ाएं और इसे टिकट कंस्ट्रक्टर में पास करें। आप कुछ त्रुटि जाँच जोड़ना चाह सकते हैं।

public class Ticket {

private static class Field {
int intValue;
String stringValue;
final Class type;

Field(Class fieldType){
type = fieldType;
}

void set(String value){
if(type.equals(String.class)){
stringValue = value;
}
else {
intValue = Integer.parseInt(value);
}
}
}

private List<Field> fields = new ArrayList<>();

private Field addField(Field field){
fields.add(field);
return field;
}

// This solution relies on adding fields in the order they"ll be retrieved in the cursor.
// Other options are possible such as a map by column index.
private Field ticketNumber = addField(new Field(Integer.class));
private Field serviceName = addField(new Field(String.class));

public Ticket(Cursor cursor){
for(int i=0; i < fields.size(); i++){
Field f = fields.get(i);
f.set(cursor.getString(i));
}
}
}

public int getTicketNumber(){
return ticketNumber.intValue;
}

// Don"t know if you need setters
public void setTicketNumber(int value){
ticketNumber.intValue = value;
}

// etc for remaining fields

मैं इस सामान को आसान बनाने के लिए ORM का उपयोग करने पर भी विचार करूंगा, बजाय इसके कि वह शाप देने वालों से निपट सके।