2016-03-30 49 views
-1

我目前正在爲我的最後一年項目編寫代碼,並且遇到了一個我似乎無法修復的問題。缺少返回語句public long

我改變了我的公共空間在我的DatabaseHandler(返回作爲身份證,然後在別處使用)公共無效,並且因爲改變代碼它堅持我有一個缺少的返回語句,但我無法弄清楚在哪裏或爲什麼。原始代碼工作正常,但只要我將public void更改爲public,就會出現丟失的return語句錯誤。

原始代碼:

public void UpdateProfileData(String email, String forename, String surname, String password, String DOB, int height, float weight, boolean gender) { 
    String query = "SELECT * FROM Profile"; 
    SQLiteDatabase db = this.getReadableDatabase(); 

    Cursor cursor = db.rawQuery(query, null); 
    int count = cursor.getCount(); 

    if (count == 0) 
    { 
     //No data stored - we need to insert the row. 
     db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 

     values.put("Email", email); 
     values.put("Forename", forename); 
     values.put("Surname", surname); 
     values.put("Password", password); 
     values.put("DOB", DOB); 
     values.put("Height", height); 
     values.put("Weight", weight); 
     values.put("Gender", gender); 

     db.insert("Profile", null, values); 

    } 
    else if (count == 1) 
    { 
     db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 

     values.put("Email", email); 
     values.put("Forename", forename); 
     values.put("Surname", surname); 
     values.put("Password", password); 
     values.put("DOB", DOB); 
     values.put("Height", height); 
     values.put("Weight", weight); 
     values.put("Gender", gender); 


     db.update("Profile", values, "Id=1", null); 

    } 

    else 
    { 
     //Something went wrong. 
    } 
} 

而新代碼:

public long UpdateProfileData(String email, String forename, String surname, String password, String DOB, int height, float weight, boolean gender) { 
    String query = "SELECT * FROM Profile"; 
    SQLiteDatabase db = this.getReadableDatabase(); 

    Cursor cursor = db.rawQuery(query, null); 
    int count = cursor.getCount(); 

    if (count == 0) 
    { 
     //No data stored - we need to insert the row. 
     db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 

     values.put("Email", email); 
     values.put("Forename", forename); 
     values.put("Surname", surname); 
     values.put("Password", password); 
     values.put("DOB", DOB); 
     values.put("Height", height); 
     values.put("Weight", weight); 
     values.put("Gender", gender); 

     long id = db.insert("Profile", null, values); 
     return id; 
    } 
    else if (count == 1) 
    { 
     db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 

     values.put("Email", email); 
     values.put("Forename", forename); 
     values.put("Surname", surname); 
     values.put("Password", password); 
     values.put("DOB", DOB); 
     values.put("Height", height); 
     values.put("Weight", weight); 
     values.put("Gender", gender); 


     long id = db.update("Profile", values, "Id=1", null); 
     return id; 
    } 

    else 
    { 
     //Something went wrong. 
    } 
} 

我是新來的Java和一般的編碼,所以如果這是一個愚蠢的錯誤,請記得要善待和解釋簡單來說!預先感謝您的幫助!

+7

您需要在'出錯的情況下返回一些東西。 – CommonsWare

+1

開始從'else'塊中返回一些東西。例如,'return -1l;' – user2004685

+2

除了@CommonsWare指出的內容之外,這段代碼是爲什麼使用單個返回點通常是最有效的方法的一個例子。 – KevinO

回答

0

此位置:

else 
    { 
     //Something went wrong. 
    } 

是的抱怨的理由......

您的方法應返回長不管是什麼...在每個如果/ ifelse你正在做的是正確的,你在這裏失蹤的回報...

修復:

根據您的應用程序邏輯添加回...

else 
    { 
     //Something went wrong. 
    return -1; 
} 
0

void方法的所有「路徑」都需要return語句。最後,您的else案例是一條沒有return的路徑。

除了簡單地將return放入else之外,另一種解決方案是在方法結束時預先初始化idreturn

long id = -1; 

if (count == 0) { 
    id = db.insert... 
} else if (count == 1) { 
    id = db.update... 
} else { 
    // Something went wrong 
} 

return id;