应用程序应该如何知道用户在第一次请求后选择了哪些项目?

时间:2015-07-06 19:36:13

标签: android

我有Checkboxlist,用户可以选择一些公交路线。选择项目后,我向服务器发送请求并获得响应。在他第一次选择之后,我想重复发送他的路线选择到服务器,以获得服务器上bus表的经度,纬度和路线,每隔30秒更新Map活动中的位置。我怎么能用android来管理它?应用程序如何知道在第一次请求后他选择了哪些路线?在这种情况下,如何反复向服务器发送请求以获取当前的总线位置?

MainActivity:

public class MainActivity extends ActionBarActivity  {

...
            btn.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    for (int i : items) {
                        CheckBox ch = (CheckBox) findViewById(i);

                        if (ch.isChecked()) {
                            int a = Integer.parseInt(ch.getText().toString());
                            selected.add(a);

                        }
                    }

                    if (selected.size() > 0) {
                        String json = array_to_json(selected);
                        GetLLRD getLRL = new GetLLRD();
                        getLRL.post_selected(json, context);

                    } else {
                        System.out.println("No route was selected!");
                    }

                    for (int b : selected) {
                        System.out.println("CheckBox output: " + b);

                    }

                    selected.clear();

                }

            });
....
}


}

GetLLRD课程:

public class GetLLRD {
    Context mContext;

    public void post_selected(String json, Context context) {
        new MyAsyncTask().execute(json);
        context = this.mContext;
    }

    class MyAsyncTask extends AsyncTask<String, Integer, List<ItemDTO>> {
        ArrayList<ItemDTO> data;


        @Override
        protected List<ItemDTO> doInBackground(String... params) {

          .
          .
          .
          .

                                try {
                    Gson gson = new Gson();
                    Type listType = new TypeToken<List<ItemDTO>>() {
                    }.getType();
                    data = gson.fromJson(sb.toString(), listType);
                } catch (JsonSyntaxException e) {
                    e.printStackTrace();
                }

                for (ItemDTO itemDTO : data) {
                    double latitude = itemDTO.getLatitude();
                    double longitude = itemDTO.getLongitude();
                    int route = itemDTO.getRoute();
                    String direction = itemDTO.getDirection();
                    System.out.println(latitude + ", " + longitude + ", "
                            + ", " + route + ", " + direction);

                }
          .
          .
          .
          .     


            return data;

        }

        protected void onPostExecute(ArrayList<ItemDTO> result) {

            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    new MyAsyncTask().execute();
                    System.out.println("The method onPostExcute() in GETLLRD class was invoked  again");
                }
            }, 1*30 * 1000);

            if (result != null && !result.isEmpty()) {
                Intent intent = new Intent(mContext, Map.class);
                intent.putExtra("list",result);
                mContext.startActivity(intent); 

            }else{
                Log.e("123", "Avoiding null pointer, the dat is null in the GETLLRD class!!!");
            }

        }

    }
}

1 个答案:

答案 0 :(得分:0)

由于您知道要跟踪哪些总线,因此您只需要记住它们。由于您将它们转换为json并将其发送到后端,因此您只需将json存储在类中的私有成员上。

为了每30秒检索一次数据,您可以使用AlarmManager每30秒触发一次事件。完成后别忘了禁用它。