アクティビティに新しいスレッドを作成します。内部では、run(..) Google から地理コードを取得するコードを記述します。JSON 応答を取得したら、処理後にハンドラーに送信します。ハンドラー内で、新しいスレッドが死んでいることがわかりました。
これが私の実行です()
@Override
public void run() {
try {
Thread.sleep(4000);
Log.d("Thread", "---Is Running---");
getCityName = getIntent().getStringExtra("city");
Log.d("----getCityName----", getCityName);
HttpRetriever httpObj = new HttpRetriever();
String geocodeUrl = "http://maps.googleapis.com/maps/api/geocode/json?address="
+ getCityName + "&sensor=true";
String url = geocodeUrl.replace(" ", "%20");
Log.d("----geocodeUrl----", url);
geocodeResponse = httpObj.retrieve(url);
Log.d("----Json Response----", geocodeResponse);
JSONObject jsonObject = new JSONObject(geocodeResponse);
JSONArray jsonArray = (JSONArray) jsonObject.get("results");
if (jsonArray.length() > 0) {
jsonObject = (JSONObject) jsonArray.get(0);
jsonObject = (JSONObject) jsonObject.get("geometry");
JSONObject location = (JSONObject) jsonObject
.get("location");
Double lat = (Double) location.get("lat");
Double lng = (Double) location.get("lng");
mypoint = new GeoPoint((int) (lat * 1000000),
(int) (lng * 1000000));
Log.d("-----Lat LOng-----", "" + lat + " " + lng);
addOverlayOnMap(mypoint, getCityName);
myMap.getController().animateTo(mypoint);
myMap.getController().setZoom(6);
}
} catch (JSONException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
handler.sendEmptyMessage(0);
}
これが私のハンドラーです。
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
pdDialog.dismiss();
if (geocodeResponse != null) {
if (t.isAlive() == true) {
Log.v("------Thread-----",
"---Inside Handler----Thread is Alive!!!!----");
} else {
Log.v("------Thread-----",
"---Inside Handler---Thread is Died!!!!----");
}
Toast.makeText(getApplicationContext(), " Ya got the json",
Toast.LENGTH_LONG).show();
}
else
Toast.makeText(getApplicationContext(), "Not Success",
Toast.LENGTH_LONG).show();
}
};
ハンドラー内でスレッドが停止するのはなぜですか? どこでも止めませんが、エミュレーターでコードをテストします
問題がある場合は、共有できます。
前もって感謝します