2016-11-06 243 views
0

我有一个回收视图,我从服务器获取数据,它的工作很好,问题是当我试图从服务器存储数据到本地数据库使用sqlite它不工作,我的问题是我可以将列表目录存储到SQL表?我试图让从列表字符串,并将其存储到本地,但其没有工作,这是我的代码,希望任何人有想法告诉我:)从服务器到本地数据sqlite存储数据Android

public void getRetrofitObject() { 
    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(BASE_URL) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 
    APIService service = retrofit.create(APIService.class); 
    Call<Result> call = service.getresults(); 
    call.enqueue(new Callback<Result>() { 
     @Override 
     public void onResponse(Call<Result> call, Response<Result> response) { 
      results = response.body().getResults(); 
      todoAdapter = new TodoRecyclerAdapter(this,results); 
      todoRecyclerView.setAdapter(todoAdapter); 
      for (int i = 0 ; i<results.size();i++) { 
       insert(response.body().getResults().get(i).getTODO_TITLE().toString(),response.body().getResults().get(i).getPriority().toString()); 
      } 
     } 
     @Override 
     public void onFailure(Call<Result> call, Throwable t) { 
      Log.d("onFailure", t.toString()); 
     }});} 
public void insert (String x , String y) 
{ 
    db.insertIntoDB(x,y); 

} 

,这是SQLite的插入方法

public void insertIntoDB(String Title,String Priority){ 
    Log.d("insert", "before insert"); 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(TODO_TITLE, Title); 
    values.put(priority, Priority); 
    db.insert(TODO_TABLE, null, values); 
    db.close(); 
} 

编辑 当我试图存储的字符串从服务器这样

public void getRetrofitObject() { 
    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(BASE_URL) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 
    APIService service = retrofit.create(APIService.class); 
    Call<Result> call = service.getresults(); 
    call.enqueue(new Callback<Result>() { 
     @Override 
     public void onResponse(Call<Result> call, Response<Result> response) { 
      results = response.body().getResults(); 
      todoAdapter = new TodoRecyclerAdapter(this,results); 
      todoRecyclerView.setAdapter(todoAdapter); 
      for (int i = 0 ; i<results.size();i++) { 

      String x = results.get(i).getTODO_TITLE().toString(); //this 
       String y = results.get(i).getPriority().toString(); 


       db.insertIntoDB(x,y); 
      } 
     } 
     @Override 
     public void onFailure(Call<Result> call, Throwable t) { 
      Log.d("onFailure", t.toString()); 
     }});} 

我的上帝这个错误

FATAL EXCEPTION: main 
                     java.lang.NullPointerException 
                      at com.example.todo.loginretroft.Activites.TodoList$3.onResponse(TodoList.java:151) 
+0

做优先级等于列名?您是否应该拥有TODO_PRIORITY? – MikeT

+0

是的,它的同名,但我想存储“结果”列表到本地! –

+0

@MikeT请检查我的更新 –

回答

0

插入任何数据到数据库之前,您应该创建数据库:) 这里是一个很好的简单的例子 - https://developer.android.com/training/basics/data-storage/databases.html

它会看起来像这样:

public class FeedReaderDbHelper extends SQLiteOpenHelper { 

    // If you change the database schema, you must increment the database version. 
    public static final int DATABASE_VERSION = 1; 
    public static final String DATABASE_NAME = "FeedReader.db"; 

    public FeedReaderDbHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(SQL_CREATE_ENTRIES); 
} 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // This database is only a cache for online data, so its upgrade policy is 
     // to simply to discard the data and start over 
     db.execSQL(SQL_DELETE_ENTRIES); 
     onCreate(db); 
} 

    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     onUpgrade(db, oldVersion, newVersion); 
} 

}

+0

谢谢,我已经创建SQLiteOpenHelper和它的好,但如何将列表插入表? –

+0

当您尝试将内容值添加到数据库时,是否有任何错误?你为你的价值观创造了一张桌子吗? – dosssik

+0

我会编辑我的问题 –

相关问题