我有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!!!");
}
}
}
}
答案 0 :(得分:0)
由于您知道要跟踪哪些总线,因此您只需要记住它们。由于您将它们转换为json并将其发送到后端,因此您只需将json存储在类中的私有成员上。
为了每30秒检索一次数据,您可以使用AlarmManager
每30秒触发一次事件。完成后别忘了禁用它。