JSON Web服务反复调用

时间:2013-07-16 04:16:59

标签: android web-services jsonp

我是android新手。我为JSON解析编写了一个代码。在这段代码中,我需要反复调用JSON Web服务。如何做到这一点。请帮帮我

public class MainActivity extends Activity implements OnItemClickListener {

    private static final String rssFeed = "https://www.dropbox.com/s/rhk01nqlyj5gixl/jsonparsing.txt?dl=1";

    private static final String ARRAY_NAME = "student";
    private static final String ID = "id";
    private static final String NAME = "name";
    private static final String CITY = "city";
    private static final String GENDER = "Gender";
    private static final String AGE = "age";
    private static final String BIRTH_DATE = "birthdate";

    List<Item> arrayOfList;
    ListView listView;
    NewsRowAdapter objAdapter;
    private static final String TAG = "Your Service";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        listView = (ListView) findViewById(R.id.listview);
        listView.setOnItemClickListener(this);

        arrayOfList = new ArrayList<Item>();

        if (Utils.isNetworkAvailable(MainActivity.this)) {

             new MyTask().execute(rssFeed);
        } else {
            //showToast("No Network Connection!!!");
        }
    }

    // My AsyncTask start...
    class MyTask extends AsyncTask<String, Void, String> {

        ProgressDialog pDialog;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Loading...");
            pDialog.setCancelable(false);
            pDialog.show();
        }

        @Override
        protected String doInBackground(String... params) {
            return Utils.getJSONString(params[0]);
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);

            if (null != pDialog && pDialog.isShowing()) {
                pDialog.dismiss();
            }

            if (null == result || result.length() == 0) {
                showToast("No data found from web!!!");
                MainActivity.this.finish();
            } else {

                try {
                    JSONObject mainJson = new JSONObject(result);
                    JSONArray jsonArray = mainJson.getJSONArray(ARRAY_NAME);
                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject objJson = jsonArray.getJSONObject(i);

                        Item objItem = new Item();

                        objItem.setId(objJson.getInt(ID));
                        objItem.setName(objJson.getString(NAME));
                        objItem.setCity(objJson.getString(CITY));
                        objItem.setGender(objJson.getString(GENDER));
                        objItem.setAge(objJson.getInt(AGE));
                        objItem.setBirthdate(objJson.getString(BIRTH_DATE));

                        arrayOfList.add(objItem);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }

                Collections.sort(arrayOfList, new Comparator<Item>() {

                    @Override
                    public int compare(Item lhs, Item rhs) {
                        return (lhs.getAge() - rhs.getAge());
                    }
                });
                setAdapterToListview();
            }
        }
    }

    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        showDeleteDialog(position);
    }

    private void showDeleteDialog(final int position) {
        AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this)
                .create();
        alertDialog.setTitle("Delete ??");
        alertDialog.setMessage("Are you sure want to Delete it??");
        alertDialog.setButton("No", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        alertDialog.setButton2("Yes", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                arrayOfList.remove(position);
                objAdapter.notifyDataSetChanged();
            }
        });
        alertDialog.show();
    }

    public void setAdapterToListview() {
        objAdapter = new NewsRowAdapter(MainActivity.this, R.layout.row,
                arrayOfList);
        listView.setAdapter(objAdapter);
    }

    public void showToast(String msg) {
        Toast.makeText(MainActivity.this, msg, Toast.LENGTH_LONG).show();
    }
}

2 个答案:

答案 0 :(得分:0)

您可以使用警报管理器并以特定时间间隔调用Web服务。您可以使用警报管理器here

进行解决

答案 1 :(得分:0)

您可以使用java类 TimerTask 重复执行方法。

另请参阅:计时器,它使用TimerTask来计划任务。