2

私は SQlite android データベースに取り組んだことがありません。したがって、可能であれば、この質問でいくつかのスプーンの餌付け/ポインターをいただければ幸いです。

状態名のリスト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

最初にアンドロイドのデータベースに。次に、データベースからそのデータを取得しListView、Android に表示する必要があります。

それが終わったら、次のようなURLを再度解析する必要があります

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

次のクラスで、それぞれの州 (上記のクラスで選択した州) のそれぞれの都市を表示します。上記の URL は、JSON再度解析してデータベースに保存し、ListView.

最後に、ListView で都市の名前をクリックすると、以下の URL を形成する 3 番目で最後のクラスにリダイレクトされます。

http://myurl.com/mycountry/openmeet.php?reg= "+state+"&cityvalid="+city

前の 2 つのクラスによって提供された情報を使用します。この URL は、JSON再度解析、保存、および に表示する必要があるいくつかのデータを提供しますListView

したがって、ここでのアプリケーションには 3 つのクラスがあります。 1. 最初のクラスでは、状態名がビューに表示されます。2. 2 番目のクラスでは、前のクラスで選択された州に応じて、それぞれの都市名がビューに表示されます。3. 3 番目のクラスでは、選択された州と選択された都市の組み合わせ URL が、その特定の都市に関連する情報の詳細を提供します。

すべてのデータはサーバーから取得されます

サーバーから直接送られてくるデータをそのまま表示するだけで、この機能を実現できましたListView。ここで、最初にデータベースに保存してから、ListView3 つのクラスすべてに対して表示する必要があります。

どんな助けでも大歓迎です。

4

2 に答える 2

3
 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;

        }

幸運を...

于 2013-10-08T07:17:55.777 に答える