2011-09-16 190 views
1

我有一個Android SQL查詢的小問題。Android Sql空指針異常

這裏是我的代碼:

 Communicator rpc; 
     dbHelper = new DataBaseHelper(context, "oops_sys_tpl.sqlite", null, 1); 
     dbHelper.getDatabase(); 
     dbHelper.executeQuery("users", "id", "75"); 
     dbHelper.executeQuery("users", "objectId", "2"); 
     dbHelper.executeQuery("users","serverName","ooops.com"); 
     dbHelper.executeQuery("users", "username", "muphet"); 

     newServerName = "stampii.com"; 
     Log.w("UserId","Show user Id : "+userId); 
     int uuId = rpc.localUserIdByServerUserId(userId,newServerName); 
     Log.w("uuId","uuId : "+uuId); 

在通訊類:

public static int localUserIdByServerUserId(int serverUserId){ 

    String query = "SELECT id FROM users WHERE objectId = "+serverUserId+" LIMIT 1"; 
    Map<String,Object> result = new HashMap<String,Object>(); 
    result.get(dbHelper.executeSQLQuery(query)); 

    int uuid = Integer.parseInt(result.get(0).toString()); 
    return uuid; 
} 

public static int localUserIdByServerUserId(int serverUserId, String serverName){ 

    String query = "SELECT id FROM users WHERE objectId = "+serverUserId+" AND serverName = "+serverName+" LIMIT 1"; 
    Map<String,Object> result = new HashMap<String,Object>(); 
    result.get(dbHelper.executeSQLQuery(query)); 

    int uuid = Integer.parseInt(result.get(0).toString()); 
    Log.w("localUSerByIdServerUserId","LocalUserByIdServerUserId result : "+uuid); 
    return uuid; 
} 

在DatabaseHelper類:

SQLIteDatabase sqliteDb; 
    public boolean executeQuery(String tableName,String keys,String value){ 
     return execQuery(tableName,keys,value); 
    } 

    private static boolean execQuery(String tableName,String key,String value){ 
     sqliteDb = instance.getWritableDatabase(); 
     ContentValues values = new ContentValues(); 
     values.put(key, value); 
     sqliteDb.insert(tableName, null, values); 

     return true; 

    } 

而且它的肆意我一個NullPointerException在:

result.get(dbHelper.executeSQLQuery(query)); 

如何解決這個問題?

+0

如果這些陳述是在不同的行上,以顯示NPE來自哪裏,會幫助你。事實上,它必須是'dbHelper',因爲'result'被分配到上面剛剛創建的一個新的'HashMap'。所以'dbHelper'是'null'。找出你的'dbHelper'創建代碼是否在NPE之前被執行,並確定是否有任何東西直接或間接地將'dbHelper'設置爲null。另外,我不知道'result.get(dbHelper.executeSQLQuery(query))'是爲了達到什麼效果,因爲'Map'將是空的,所以'Map.get'的使用不會達到任何效果。 –

+0

那麼我怎麼能把結果的dbHelper.executeSQLQuery(查詢)在一個地圖,ArrayList或任何工作? –

+0

看到這個答案 - http://stackoverflow.com/questions/2567594/cursor-while-loop-returning-every-value-but-the-last - 如何遍歷查詢的結果。從你需要的行中取出這些項目,並將它們放入'ArrayList'或類似的項目中。 –

回答

0

你在這一行中調用的方法:result.get(dbHelper.executeSQLQuery(query));和你在這裏顯示的public boolean executeQuery()的方法是不同的,所以我猜這個問題在另一個問題。檢查它,你會找到答案或粘貼它在這裏,我們可以幫助你。