2013-10-08 59 views
2

我從來沒有在SQlite android數據庫上工作過。所以如果可能的話,我會非常感謝這個問題中的一些勺子餵食/指針。將JSON格式的服務器數據存儲到Android Sqlite數據庫

我有一個服務,它給我一個形式爲JSON的狀態名稱列表,我需要解析並存儲到Android數據庫中並將其顯示到ListView上。 目前正在成功地得以只是解析JSON數據,因爲它來了,然後直接顯示它到ListView用下面這段代碼的幫助:

public class OpenMeetingsListActivity extends ListActivity 
{ 

    private Context context; 
    private static String url = "http://myurl.com/mycountry/statelist.php"; 

    private static final String TAG_POSTS = "posts"; 
    private static final String TAG_SN = "sn"; 
    JSONArray posts = null; 

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

    ListView lv ; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right); 
     setContentView(R.layout.main); 
     TextView t=(TextView)findViewById(R.id.textView_header); 
     t.setText("Select Your State"); 

     new ProgressTask(OpenMeetingsListActivity.this).execute(); 

    } 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     // TODO Auto-generated method stub 
     super.onListItemClick(l, v, position, id); 
     String stateSelected = ((TextView) v.findViewById(R.id.sn)).getText().toString(); 

     String url="http://myurl.com/mycountry/citylist.php?stname="+URLEncoder.encode(stateSelected); 

     Intent intent=new Intent(OpenMeetingsListActivity.this,OpenMeetingsListActivity_Items.class); 
     intent.putExtra("url", url); 
     intent.putExtra("stateSelected",stateSelected); 
     startActivity(intent); 
    } 

    private class ProgressTask extends AsyncTask<String, Void, Boolean> { 

     private ProgressDialog dialog; 
     OpenMeetingsListActivity op; 


     public ProgressTask(ListActivity activity) { 

      Log.i("1", "Called"); 
      context = activity; 
      dialog = new ProgressDialog(context); 
     } 

     /** progress dialog to show user that the backup is processing. */ 

     /** application context. */ 
     private Context context; 

     protected void onPreExecute() { 
      this.dialog.setMessage("Progress start"); 
      this.dialog.show(); 
     } 

     @Override 
     protected void onPostExecute(final Boolean success) { 
      if (dialog.isShowing()) { 
       dialog.dismiss(); 
      } 

      ListAdapter adapter = new SimpleAdapter(context, jsonlist, 
        R.layout.list_openmeeting_item, new String[] { TAG_SN }, new int[] { 
        R.id.sn }); 

      setListAdapter(adapter); 

      // selecting single ListView item 
      lv = getListView(); 

     } 

     protected Boolean doInBackground(final String... args) { 

      JSONParser jParser = new JSONParser(); 

      // getting JSON string from URL 
      JSONObject json = jParser.getJSONFromUrl(url); 


      try { 
       posts = json.getJSONArray(TAG_POSTS); 
      } catch (JSONException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
      try 
      { 

       for(int i = 0; i < posts.length(); i++){ 
        JSONObject c = posts.getJSONObject(i); 
        String sn = c.getString(TAG_SN); 
        HashMap<String, String> map = new HashMap<String, String>(); 
        map.put(TAG_SN, sn); 
        jsonlist.add(map); 
       } }catch (JSONException e) 
       { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 


      return null; 

     } 

    } 



} 

現在的變化,我需要在此代碼,以或說什麼我需要添加到這個代碼是我需要的JSON數據存儲這就是從鏈接

http://myurl.com/mycountry/statelist.php

進場在androi數據庫首先。然後我需要從數據庫中獲取這些數據並將其顯示到android中的ListView上。

我用,我需要再次解析的網址,如

http://myurl.com/mycountry/citylist.php?stname=「+ URLEncoder.encode(stateSelected)

隔壁班的展現在各個城市完成後(上面的類中選擇的狀態),上面的url以JSON的形式給出了城市的名稱,需要重新解析並存儲到數據庫中,並顯示在ListView

最後,當一個點擊它重定向到形成以下

http://myurl.com/mycountry/openmeet.php?reg=「+狀態+」 & cityvalid =「+城市這個網址的第三和最後類的ListView一個城市的名字

使用前兩個類提供的信息。該網址提供了一些JSON數據,這些數據也需要解析,存儲並顯示在ListView上。

因此,我在這裏的應用程序有三個類: 1.在第一個類中,狀態名顯示在View上。 2.在第二類中,相應的城市名稱顯示在視圖上,具體取決於上一課中選擇哪個州。 3.在第三類中,選定州和選定城市的組合網址提供與該特定城市相關的信息詳情。

所有數據來自服務器

我已經能夠通過簡單地將來自服務器的數據直接顯示在ListView上來實現此功能。現在我需要先將它存儲到數據庫中,然後在ListView上顯示所有三個類。

任何幫助表示讚賞。

回答

2

我已經能夠實現此功能,只需將來自服務器的數據直接顯示到ListView中即可。 現在我需要先將它存儲到數據庫中,然後將其顯示在所有三個類的 ListView之間。

恕我直言,你只需要知道如何做的android源碼CRUD操作工作,以下是你可能會得到解決掉一些步驟:

  • 谷歌一sqlite- android教程
  • 據我所知,你有知識解析JSON這樣你就可以從JSON文件獲取數據(name-value對)
  • 這些將要在sqlite的分貝
  • 名稱相關json數據將是數據集列中。
  • 要再次進行數據填充到ListView你必須獲取(讀取)從源碼,然後使用Asynctask數據可以再次填充它
4
protected Boolean doInBackground(final String... args) { 

      JSONParser jParser = new JSONParser(); 

      // getting JSON string from URL 
      JSONObject json = jParser.getJSONFromUrl(url); 


      try { 
       posts = json.getJSONArray(TAG_POSTS); 
      } catch (JSONException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
      try 
      { 

       for(int i = 0; i < posts.length(); i++){ 
        JSONObject c = posts.getJSONObject(i); 
        String sn = c.getString(TAG_SN); 
        HashMap<String, String> map = new HashMap<String, String>(); 
        map.put(TAG_SN, sn); 
        jsonlist.add(map); 

        //Just Put your database insert query here 
        ContentValues contentValues = new ContentValues(); 
        contentValues.put(TAG_SN, sn); 
        database.insert(TABLE_NAME, null, contentValues); 

       } }catch (JSONException e) 
       { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 


      return null; 

     } 

好運...

相關問題