エラーを見つけるために日を検索します。私には成功がありません。ListView を使用したアクティビティがあります。ListView は json データで 5 分ごとに更新されます。json データを取得するには、緯度と経度をサーバーに POST します (SQL でフィルター処理します)。毎回 ListView をクリアします。mylist.clear();
わかった。それはうまくいきます。
LocationManager は常に Location を更新します (Toast で確認します)。json データの郡をフィルター処理します。
JSONObject json = null;
json = jsonFunctions.getJSONfromURL("http://myurl.de", mlat, mlon);
しかし、郡を離れて新しい郡にいる場合、ListView は新しいデータで更新されません。古い郡の古いデータを更新するたびに表示されます。
しかし、私は別の活動をしています
Intent intent = new Intent(StartActivity.this, ReportActivity.class);
startActivity(intent);
finish();
アプリを起動してListViewでアクティビティに戻ると、正しいjsonデータを含む新しい郡が利用可能です...
私は自分の間違いを見つけませんでした。助けてください。
コード:
public class StartActivity extends ListActivity {
private Timer autoUpdate;
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
Button btnShowLocation;
// GPSTracker class
GpsData gps;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.listplaceholder);
btnShowLocation = (Button) findViewById(R.id.report_btn);
btnShowLocation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(StartActivity.this, ReportActivity.class);
startActivity(intent);
finish();
}
});
//new task().execute();
}
@Override
public void onResume() {
super.onResume();
autoUpdate = new Timer();
autoUpdate.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
//start GPS
gps = new GpsData(StartActivity.this);
Toast.makeText(StartActivity.this, "lat: " + gps.getLatitude() + "lon: " + gps.getLongitude(), Toast.LENGTH_SHORT).show();
//start json download
new task().execute();
}
});
}
}, 0, 300000); // updates each 5 min
}
class task extends AsyncTask<String, String, Void>
{
private ProgressDialog progressDialog = new ProgressDialog(StartActivity.this);
InputStream is = null ;
String result = "";
protected void onPreExecute() {
progressDialog.setMessage("Status Update...");
progressDialog.show();
progressDialog.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface arg0) {
task.this.cancel(true);
}
});
}
@Override
protected Void doInBackground(String... params) {
//get Location Data
double latitude = gps.getLatitude();
double longitude = gps.getLongitude();
String mlat = String.valueOf(latitude);
String mlon = String.valueOf(longitude);
//if (gps.latitude != 0.0) {
JSONObject json = null;
json = jsonFunctions.getJSONfromURL("http://myurl.de", mlat, mlon);
if (json != null){
try{
JSONArray earthquakes = json.getJSONArray("bing");
mylist.clear();
String myCity = "";
for(int i=0;i<earthquakes.length();i++){
HashMap<String, String> map = new HashMap<String, String>();
JSONObject e = earthquakes.getJSONObject(i);
//get the wright name for artID
String myArt = getString(getResources().getIdentifier("list_" + e.getString("artID"), "string", getPackageName()));
if (!(e.getString("county") == e.getString("city"))){
myCity = e.getString("city");
}
if (e.getString("city").equals("")){
myCity = e.getString("county");
}
// Get Time difference
String clienttime = e.getString("clienttime");
long mTime = (System.currentTimeMillis() - Long.valueOf(clienttime).longValue()) / (60 * 1000);
map.put("id", String.valueOf(i));
map.put("mlat", e.getString("lat"));
map.put("mlon", e.getString("lon"));
map.put("first", myArt + ": " + e.getString("road") + ", " + myCity);
map.put("second", mTime + " min. ago, " + e.getString("suburb"));
mylist.add(map);
}
}
catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
}
else{
mylist.clear();
HashMap<String, String> map = new HashMap<String, String>();
map.put("id", "1");
map.put("mlat", "51.6764996");
map.put("mlon", "7.7664251");
map.put("first", getString(R.string.no_data1));
map.put("second", getString(R.string.no_data));
mylist.add(map);
}
//}
return null;
}
protected void onPostExecute(Void v) {
ListAdapter adapter = new SimpleAdapter(StartActivity.this, mylist , R.layout.main,
new String[] { "first", "second" },
new int[] { R.id.item_title, R.id.item_subtitle });
setListAdapter(adapter);
final ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
@SuppressWarnings("unchecked")
HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);
Toast.makeText(StartActivity.this, "Map View is coming soon", Toast.LENGTH_SHORT).show();
//Intent intent = new Intent(android.content.Intent.ACTION_VIEW,Uri.parse("geo:" + o.get("mlat") + "," + o.get("mlon") + "?z=20"));
//startActivity(intent);
}
});
this.progressDialog.dismiss();
}
}
@Override
public void onPause() {
super.onPause();
autoUpdate.cancel();
gps.stopUsingGPS();
}
}