2013-07-03 60 views
0

我想存儲一個JSON數據到數據庫,它必須顯示我的應用程序必須顯示一些以前的數據沒有互聯網時間also.For那我想創建一個數據庫的JSON數據儲藏。想要插入JSON數據到Sqlite數據庫

這是我爲json數據創建的db部分。

public class GinfyDbAdapter { 

    private static final String DATABASE_NAME = "ginfy.db"; 
    private static final String DATABASE_TABLE_PROJ = "prayers"; 
    private static final int DATABASE_VERSION = 2; 
    public static final String CATEGORY_COLUMN_ID = "id"; 
    public static final String CATEGORY_COLUMN_TITLE = "title"; 
    public static final String CATEGORY_COLUMN_CONTENT = "content"; 
    public static final String CATEGORY_COLUMN_COUNT = "count"; 


    private static final String TAG = "ProjectDbAdapter"; 
    private DatabaseHelper mDbHelper; 
    private SQLiteDatabase mDb; 

    public GinfyDbAdapter(MainActivity mainActivity) { 
     // TODO Auto-generated constructor stub 
    } 

    public GinfyDbAdapter GinfyDbAdapter(Context context){ 
     mDbHelper = new DatabaseHelper(context); 

     mDb = mDbHelper.getWritableDatabase(); 
     return this; 
    } 

    public void saveCategoryRecord(String id, String title, String content, String count) { 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put(CATEGORY_COLUMN_ID, id); 
     contentValues.put(CATEGORY_COLUMN_TITLE, title); 
     contentValues.put(CATEGORY_COLUMN_CONTENT, content); 
     contentValues.put(CATEGORY_COLUMN_COUNT, count); 
     mDb.insert(DATABASE_NAME, null, contentValues); 
     } 
    public Cursor getTimeRecordList() { 
     return mDb.rawQuery("select * from " + DATABASE_NAME, null); 
     } 
    private static class DatabaseHelper extends SQLiteOpenHelper { 

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



    private static final String DATABASE_CREATE_PROJ = 
      "create table " + DATABASE_TABLE_PROJ + " (" 
        + CATEGORY_COLUMN_ID + " integer primary key autoincrement, " 
        + CATEGORY_COLUMN_TITLE + " text not null, " + CATEGORY_COLUMN_CONTENT + " text not null, " + CATEGORY_COLUMN_COUNT + " integer primary key autoincrement );" ; 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // TODO Auto-generated method stub 
     db.execSQL("CREATE TABLE " + DATABASE_TABLE_PROJ + "(" 
       + CATEGORY_COLUMN_ID + " INTEGER PRIMARY KEY, " 
       + CATEGORY_COLUMN_TITLE + " TEXT, " + CATEGORY_COLUMN_CONTENT + " TEXT, " + CATEGORY_COLUMN_COUNT + " INTEGER PRIMARY KEY)"); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // TODO Auto-generated method stub 
     db.execSQL("DROP TABLE IF EXISTS"+ DATABASE_NAME); 
     onCreate(db); 
    } 

} 


} 

這是mainactivity這是顯示列表視圖

public class MainActivity extends Activity implements FetchDataListener,OnClickListener{ 
    private static final int ACTIVITY_CREATE=0; 
    private static final String TAG_CATEGORY = "post"; 
    private static final String CATEGORY_COLUMN_ID = "id"; 
    private static final String CATEGORY_COLUMN_TITLE = "title"; 
    private static final String CATEGORY_COLUMN_CONTENT = "content"; 
    private static final String CATEGORY_COLUMN_COUNT = "count"; 
    private static final int Application = 0; 
    private ProgressDialog dialog; 
    ListView lv; 
    ListView lv1; 
    private List<Application> items; 
    private Button btnGetSelected; 
    private Button praycount; 
    public int pct; 
    private String stringVal; 
    private TextView value; 
    private int prayers; 
    private int prayerid; 
    EditText myFilter; 
    ApplicationAdapter adapter; 
    private GinfyDbAdapter mDbHelper; 
    JSONArray contacts = null; 
     private SimpleCursorAdapter dataAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_list_item); 
     mDbHelper=new GinfyDbAdapter(MainActivity.this); 

     lv1 =(ListView)findViewById(R.id.list); 
     lv =(ListView)findViewById(R.id.list); 

     ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>(); 

      // Creating JSON Parser instance 
      //JSONParser jParser = new JSONParser(); 
      JSONObject jsonObject = new JSONObject(); 
      //JSONArray aJson = jsonObject.getJSONArray("post"); 
      String url = "http://www.ginfy.com/api/v1/posts.json"; 
      // getting JSON string from URL 
      JSONArray aJson = jsonObject.getJSONFromUrl(url); 

      try { 
       // Getting Array of Contacts 
       contacts = aJson.getJSONObject(TAG_CATEGORY); 

       // looping through All Contacts 
       for(int i = 0; i < contacts.length(); i++){ 
        JSONObject c = contacts.getJSONObject(i); 

        // Storing each json item in variable 
        String id = c.getString(CATEGORY_COLUMN_ID); 
        String title = c.getString(CATEGORY_COLUMN_TITLE); 
        String content = c.getString(CATEGORY_COLUMN_CONTENT); 
        String count = c.getString(CATEGORY_COLUMN_COUNT); 

        mDbHelper.saveCategoryRecord(id,title,content,count); 

        // creating new HashMap 
        HashMap<String, String> map = new HashMap<String, String>(); 

        // adding each child node to HashMap key => value 
        map.put(CATEGORY_COLUMN_ID, id); 
        map.put(CATEGORY_COLUMN_TITLE, title); 
        map.put(CATEGORY_COLUMN_CONTENT, content); 
        map.put(CATEGORY_COLUMN_COUNT, count); 
        // adding HashList to ArrayList 
        contactList.add(map); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 





     btnGetSelected = (Button) findViewById(R.id.btnget); 
     btnGetSelected.setOnClickListener(this); 

     myFilter = (EditText) findViewById(R.id.myFilter); 




     //praycount.setOnClickListener(this); 
     initView(); 
    } 

    private void initView(){ 
     // show progress dialog 
     dialog = ProgressDialog.show(this, "", "Loading..."); 
     String url = "http://www.ginfy.com/api/v1/posts.json"; 
     FetchDataTask task = new FetchDataTask(this); 
     task.execute(url); 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu); 
     MenuInflater mi = getMenuInflater(); 
     mi.inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onMenuItemSelected(int featureId, MenuItem item) { 
     createProject(); 
     return super.onMenuItemSelected(featureId, item); 
    } 

    private void createProject() { 
     Intent i = new Intent(this, AddPrayerActivity.class); 
     startActivityForResult(i, ACTIVITY_CREATE); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
     super.onActivityResult(requestCode, resultCode, intent); 
     initView(); 
    } 

    @Override 
    public void onFetchComplete(List<Application> data){ 
     this.items = data; 
     // dismiss the progress dialog 
     if (dialog != null) 
      dialog.dismiss(); 
     // create new adapter 
     ApplicationAdapter adapter = new ApplicationAdapter(this, data); 
     /*dataAdapter adapter = new SimpleCursorAdapter(this, 
        R.layout.activity_row, 
        new String[] { CATEGORY_COLUMN_TITLE, CATEGORY_COLUMN_CONTENT, CATEGORY_COLUMN_COUNT }, new int[] { 
          R.id.text2, R.id.text1, R.id.count });*/ 

      //lv.setListAdapter(adapter); 
     // set the adapter to list 
     lv.setAdapter(adapter); 
     lv.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 

       CheckBox chk = (CheckBox) view.findViewById(R.id.checkbox); 
       Application bean = items.get(position); 
       if (bean.isSelected()) { 
        bean.setSelected(false); 
        chk.setChecked(false); 
       } else { 
        bean.setSelected(true); 
        chk.setChecked(true); 
       } 

      } 
     }); 
    } 

    // Toast is here... 
    private void showToast(String msg) { 
     Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onFetchFailure(String msg){ 
     if (dialog != null) 
      dialog.dismiss(); 
     Toast.makeText(this, msg, Toast.LENGTH_LONG).show(); 
    } 

使用DB它顯示在列表視圖還之前,儀式現在我想讓分貝此外,對於我在mainactivity寫一些代碼。

Fetchdatatask.java

public class FetchDataTask extends AsyncTask<String, Void, String> 
{ 
    private final FetchDataListener listener; 
    private OnClickListener onClickListener; 
    private String msg; 

    public FetchDataTask(FetchDataListener listener) 
    { 
     this.listener = listener; 
    } 



    @Override 
    protected String doInBackground(String... params) 
    { 
     if (params == null) 
      return null; 
     // get url from params 
     String url = params[0]; 
     try 
     { 
      // create http connection 
      HttpClient client = new DefaultHttpClient(); 
      HttpGet httpget = new HttpGet(url); 
      // connect 
      HttpResponse response = client.execute(httpget); 
      // get response 
      HttpEntity entity = response.getEntity(); 
      if (entity == null) 
      { 
       msg = "No response from server"; 
       return null; 
      } 
      // get response content and convert it to json string 
      InputStream is = entity.getContent(); 
      return streamToString(is); 
     } 
     catch (IOException e) 
     { 
      msg = "No Network Connection"; 

     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String sJson) 
    { 
     if (sJson == null) 
     { 
      if (listener != null) 
       listener.onFetchFailure(msg); 
      return; 
     } 
     try 
     { 
      // convert json string to json object 
      JSONObject jsonObject = new JSONObject(sJson); 
      JSONArray aJson = jsonObject.getJSONArray("post"); 
      // create apps list 
      List<Application> apps = new ArrayList<Application>(); 
      for (int i = 0; i < aJson.length(); i++) 
      { 
       JSONObject json = aJson.getJSONObject(i); 
       Application app = new Application(); 
       app.setContent(json.getString("content")); 
       app.setTitle(json.getString("title")); 
       app.setCount(Integer.parseInt(json.getString("count"))); 
       app.setId(Integer.parseInt(json.getString("id"))); 



       // add the app to apps list 
       apps.add(app); 


      } 
      //notify the activity that fetch data has been complete 
      if (listener != null) 
       listener.onFetchComplete(apps); 
     } 
     catch (JSONException e) 
     { 
      e.printStackTrace(); 
      msg = "Invalid response"; 
      if (listener != null) 
       listener.onFetchFailure(msg); 
      return; 
     } 
    } 

    /** 
    * This function will convert response stream into json string 
    * 
    * @param is 
    *   respons string 
    * @return json string 
    * @throws IOException 
    */ 
    public String streamToString(final InputStream is) throws IOException 
    { 
     BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     try 
     { 
      while ((line = reader.readLine()) != null) 
      { 
       sb.append(line + "\n"); 
      } 
     } 
     catch (IOException e) 
     { 
      throw e; 
     } 
     finally 
     { 
      try 
      { 
       is.close(); 
      } 
      catch (IOException e) 
      { 
       throw e; 
      } 
     } 
     return sb.toString(); 
    } 
} 

這fetchdatatask從JSON和列表視圖中顯示取,我想,如果沒有互聯網的時間它在列表視圖顯示也爲我創造分貝。

你能檢查我的代碼是否正確,實際上它在mainactivity中顯示錯誤行JSONArray aJson = jsonObject.getJSONFromUrl(url);

回答

2

創建一個類,它充當的是你的數據庫類和主要活動之間的中間將數據插入到數據庫,反之亦然

public class Category { 

    String id; 
    String title; 
    String content; 
    String count; 
    public Category(String id, String title, String content, String count) { 
     super(); 
     this.id = id; 
     this.title = title; 
     this.content = content; 
     this.count = count; 
    } 
    public String getId() { 
     return id; 
    } 
    public void setId(String id) { 
     this.id = id; 
    } 
    public String getTitle() { 
     return title; 
    } 
    public void setTitle(String title) { 
     this.title = title; 
    } 
    public String getContent() { 
     return content; 
    } 
    public void setContent(String content) { 
     this.content = content; 
    } 
    public String getCount() { 
     return count; 
    } 
    public void setCount(String count) { 
     this.count = count; 
    } 
} 

在您的主要活動,你做的JSON解析創建一個對象DB類,並調用一個在那裏保存記錄的方法就像我在你的數據庫類下面

DatabaseHelper mDbHelper; 
public class ABC extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.abc); 
       mDbHelper= new DatabaseHelper (this); 
       new GetSyncDataAsyncTask().execute(); 

    } 
} 


    private class GetDataAsyncTask extends AsyncTask<Void, Void, Boolean> { 
      private ProgressDialog Dialog = new ProgressDialog(ABC.this); 

      protected void onPreExecute() { 
       Dialog.setMessage("Loading....."); 
       Dialog.show(); 
      } 
      @Override 
      protected void onPostExecute(Boolean result) { 
       super.onPostExecute(result); 
       Dialog.dismiss(); 
       Intent intent = new Intent(ABC.this, XYZ.class); 
       startActivity(intent); 
      } 
      @Override 
      protected Boolean doInBackground(Void... params) { 
       getData(); 
       return null; 
      } 
     } 


    public void getProdData() { 
     // getting JSON string from URL 
     JSONParser parser = new JSONParser(); 
     JSONObject jsonObject = new JSONObject(); 
      //JSONArray aJson = jsonObject.getJSONArray("post"); 
      String url = "http://www.ginfy.com/api/v1/posts.json"; 
      // getting JSON string from URL 
      JSONArray aJson = jsonObject.getJSONFromUrl(url); 

      try { 
       // Getting Array of Contacts 
       contacts = aJson.getJSONObject(TAG_CATEGORY); 

       // looping through All Contacts 
       for(int i = 0; i < contacts.length(); i++){ 
        JSONObject c = contacts.getJSONObject(i); 

        // Storing each json item in variable 
        String id = c.getString(CATEGORY_COLUMN_ID); 
        String title = c.getString(CATEGORY_COLUMN_TITLE); 
        String content = c.getString(CATEGORY_COLUMN_CONTENT); 
        String count = c.getString(CATEGORY_COLUMN_COUNT); 

        mDbHelper.saveCategoryRecord(new Category(id,title,content,count)); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

最後沒有插入值類似下面

public void saveCategoryRecord(Category category) { 

     String query = "insert into"+ TABLE_NAME+ values(?, ?, ?, ?, ?, ?)"; 
     SQLiteStatement stmt = mDb.compileStatement(query); 
     stmt.bindString(1, category.getId()); 
     stmt.bindString(2, category.getTitle()); 
     stmt.bindString(3, category.getContent()); 
     stmt.bindString(4, category.getCount()); 
     stmt.execute(); 
    } 

我嘗試過使用和以前一樣的東西。這是我現在認爲你的想法是這樣做的

+0

,我的db類是正確的傢伙,之後,如何顯示在列表視圖夥計 –

+1

對不起,你必須自己做。不是一個大的任務,是 –

+0

花花公子json解析器沒有解決 –