2013-10-25 61 views
0

這裏有以下我的課:我無法創建SQLite數據庫。錯誤:顯示java.lang.NullPointerException

StatsObjectId.java

public class StatsObjectId extends Activity { 
    DBClass db; 
    protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    db = new DBClass(this); 
    } 
    public void addObjId(String objid){ 
    Log.e("objectid","This is the object id going to store: "+objid); 


      db.addObjectId(objid); //This is the line# 105 


      if(getObjId()){ 
     Log.e("objectid","Successfully stored!"); 
    }else{ 
     Log.e("objectid","Error in storing object id!"); 
     } 
    } 
    public boolean getObjId(){ 
    boolean result; 
    try{ 
    c = db.getObjectId(); 
    c.moveToFirst(); 
    String str = c.getString(c.getColumnIndex("objectid")); 
    Log.e("objectid","Object id returned form DB: "+str); 
    result = true; 
    }catch(CursorIndexOutOfBoundsException e){ 
     Log.e("objectid","Cursor index out of bound"); 
     result = false; 
     e.printStackTrace(); 
    }catch(Exception e){ 
     Log.e("objectid","Some Another Exception"); 
     result = false; 
     e.printStackTrace(); 
    } 
    return result; 
} 

ParseComServerAccessor.java

public class ParseComServerAccessor { 
//I am skipping some irrelevant code 
    public void putStats(String authtoken, String userId, Tas statsToAdd) throws Exception { 
    //Again skip some code 
    //Here I got some HttpResponse and I need to extract an object id and save it to database 
    HttpResponse response = httpClient.execute(httpPost); 
    String responseString = EntityUtils.toString(response.getEntity()); 
    JSONObject json = new JSONObject(responseString); 
    Log.e("objectid","Now Object Id is: "+json.getString("objectId")); 
    StatsObjectId ob = new StatsObjectId(); 


    ob.addObjId(json.getString("objectId")); // This is the line#156 
    //skip some code 
    } 
} 

TasSyncAdapter.java

public class TasSyncAdapter extends AbstractThreadedSyncAdapter { 
    //skipped Constructor code 
    public void onPerformSync(Account account, Bundle extras, String authority, 
    ContentProviderClient provider, SyncResult syncResult) { 
    //skipped some code 
    ParseComServerAccessor parseComService = new ParseComServerAccessor(); 
    //skipped some code again 


    parseComService.putStats(authToken, userObjectId, remoteTas); //This is the line# 134 
    //skip some code 
    } 
} 

如今終於,當我跑我的應用程序...這是以下登錄貓

Tag     Text 

objectid    This is the object id going to store: 9AFysqffz7 
System.err    java.lang.NullPointerException 
System.err    at com.myapp.ds_app.StatsObjectId.addObjId(StatsObjectId.java:105) 
System.err    at com.myapp.ds_app.syncadapter.ParseComServerAccessor.putStats(ParseComServerAccessor.java:156) 
System.err    at com.myapp.ds_app.syncadapter.TasSyncAdapter.onPerformSync(TasSyncAdapter.java:134) 
System.err    at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:254) 

DBClass.java

public class DBClass extends SQLiteOpenHelper { 
private static final String DATABASE_NAME="myapp.db"; 
public DBClass(Context cxt){ 
    super(cxt, DATABASE_NAME, null, 1); 
} 
@Override 
public void onCreate(SQLiteDatabase mydatabase) { 
    mydatabase.execSQL("CREATE TABLE IF NOT EXISTS temp (objectid STRING)"); 
} 
public Cursor getObjectId(){ 
    Cursor cursor = getReadableDatabase().rawQuery("SELECT objectid FROM temp", null); 
    return cursor; 
} 
public void addObjectId(String objid){ 
    try{ 
    ContentValues cv = new ContentValues(1); 

    Log.e("objectid","In DBClass and object id: "+objid); 
    cv.put("objectid", objid); 
    Log.e("objectid","Content value contains: "+cv.toString()); 
    getWritableDatabase().insert("temp", "objectid", cv); 

    }catch(NullPointerException e){ 
     e.printStackTrace(); 
    } 
} 

} 

現在,我在這一點上stucked! 到目前爲止,我只需要保存一個值。我試圖創建一個文件,而不是在數據庫中保存一個值。但是,ContextWrapper也有一些例外。

我目前有興趣處理數據庫。

請讓我知道你們是否需要任何其他信息。

我真的很感激,如果任何人請解釋這件事情。我是Android新手,很想了解這個問題。提前致謝!

+3

很多代碼。請深入瞭解與您的問題相關的內容。 – Prateek

+0

只是一個鏡頭,我會說'數據庫'在第105行爲'null'。它在哪裏初始化? – dic19

+0

@Prateek因爲,我希望你們能提供我能做到的最大的事情! – Yasir

回答

2
StatsObjectId ob = new StatsObjectId(); 

你是一個活動類的instanciating。你不能這樣做。 (當你這樣做的時候,Android中應該有一些東西來告訴你)基本上,上下文沒有被初始化,因爲android需要這樣做才能擁有一個功能活動。

另外,Android(創建Activity時)使用適當的上下文調用onCreate方法。你不(也不能),因此你的數據庫是空的。

在AbstractThreadedSyncAdapter中,您有一個getContext方法來獲取正確的上下文。使用它來初始化數據庫並在其中插入數據,而不是將它傳遞給Activity對象。

相關問題