Web サーバーから取得した座標を使用してマップを更新しようとしています。これは私の AsyncTask です:
public class GetUsersAsyncTask extends AsyncTask<String, Void, String>
{
HttpResponse response = null;
InputStream is = null;
AndroidHttpClient httpclient;
String responseString = null;
@SuppressLint("NewApi")
@Override
protected String doInBackground(String... url) {
try{
Log.i("entrabackground",""+(++ae));
httpclient = AndroidHttpClient.newInstance("Android");
Log.i("!!","upa upa");
HttpUriRequest request = new HttpGet(mUrl+eventid);
Log.i("!!","taaa beemmm");
request.addHeader("Accept","application/json");
Log.i("!!","oh pahhh");
response = httpclient.execute(request);
} catch (ClientProtocolException e1) {
Log.i("erro1","Erro");
e1.printStackTrace();
} catch (IOException e1) {
Log.i("erro2","Erro");
e1.printStackTrace();
}
httpclient.close();
try {
if( String.valueOf(response.getEntity()) == "null")
{
responseString= "null";
Log.i("null", responseString.toString());
}
else
{
is = response.getEntity().getContent();
responseString = convertStreamToString(is);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.i("saibackgroud",""+(++ao));
return responseString;
}
@Override
protected void onPostExecute(String responseString) {
//super.onPostExecute(responseString);
//Do anything with response..
//Toast.makeText(getApplicationContext(), responseString,Toast.LENGTH_SHORT).show();
Log.i("entrapost",""+(++ai));
try
{
json = new JSONObject(responseString.trim());
//Toast.makeText(getApplicationContext(), json.toString(), Toast.LENGTH_SHORT).show();
}
catch (JSONException e) {
e.printStackTrace();
}
try{
Log.i("faz isto",""+(++au));
users_locations = json.getJSONArray("user");
userdraw.removeOverlay(item);
mapView.invalidate();
user_name=users_locations.getJSONObject(0).getString("name");
user_lat=users_locations.getJSONObject(0).getDouble("latitude");
user_lng=users_locations.getJSONObject(0).getDouble("longitude");
userpoint = new GeoPoint((int) (user_lat * 1E6), (int) (user_lng * 1E6));
item = new OverlayItem(userpoint,null,null);
//Get the new Drawable
//Set its bounds
usermarker.setBounds(-usermarker.getIntrinsicWidth()/2,- usermarker.getIntrinsicHeight(),usermarker.getIntrinsicWidth()/2,0);
//Set the new marker
item.setMarker(usermarker);
userdraw.addOverlay(item);
mc.animateTo(userpoint);
mapView.invalidate();
Log.i("userslocations",user_name+" "+user_lat+" "+user_lng);
}catch (JSONException e) {
Toast.makeText(getApplicationContext(), "Connection Lost", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
この asyncTask はハンドラーから呼び出されます。
handler = new Handler();
runnable = new Runnable() {
@Override
public void run() {
Log.i("url",mUrl+eventid);
/* do what you need to do */
//call asynctask
GetUsersAsyncTask getusers = new GetUsersAsyncTask();
getusers.execute(mUrl+eventid).toString();
/* and here comes the "trick" */
//10 seconds delay
handler.postDelayed(this, 30000);
}
};
runnable.run();
PostExecution タスクのある時点でエラーが発生し、その理由がわかりません。オンになっているようですjson = new JSONObject(responseString.trim());
これは私のLogCatです:
01-16 00:44:37.005: E/AndroidRuntime(8625): キャッチされないハンドラー: キャッチされない例外が原因で終了するスレッド メイン 01-16 00:44:37.105: E/AndroidRuntime(8625): java.lang.NullPointerException 01-16 00:44:37.105: E/AndroidRuntime(8625): com.example.su2.EventMap$GetUsersAsyncTask.onPostExecute(EventMap.java:273) 01-16 00:44:37.105: E/AndroidRuntime(8625): com .example.su2.EventMap$GetUsersAsyncTask.onPostExecute(EventMap.java:1) 01-16 00:44:37.105: E/AndroidRuntime(8625): android.os.AsyncTask.finish(AsyncTask.java:417) 01- 16 00:44:37.105: E/AndroidRuntime(8625): android.os.AsyncTask.access$300(AsyncTask.java:127) 01-16 00:44:37.105: E/AndroidRuntime(8625): android.os で.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) 01-16 00:44:37.105: E/AndroidRuntime(8625): android.os.Handler で。dispatchMessage(Handler.java:99) 01-16 00:44:37.105: E/AndroidRuntime(8625): android.os.Looper.loop(Looper.java:123) 01-16 00:44:37.105: E/ AndroidRuntime(8625): android.app.ActivityThread.main(ActivityThread.java:4370) 01-16 00:44:37.105: E/AndroidRuntime(8625): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) で01-16 00:44:37.105: E/AndroidRuntime(8625): java.lang.reflect.Method.invoke(Method.java:521) 01-16 00:44:37.105: E/AndroidRuntime(8625): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 01-16 00:44:37.105: E/AndroidRuntime(8625): com.android.internal.os.ZygoteInit.main(ZygoteInit) .java:626) 01-16 00:44:37.105: E/AndroidRuntime(8625): dalvik.system.NativeStart.main(ネイティブ メソッド) 01-16 00:44:37.285: E/SemcCheckin(8625): Getクラッシュ ダンプ レベル:java.io.FileNotFoundException: /data/semc-checkin/crashdump
手伝って頂けますか?