У меня возникла проблема с фатальным исключением AsyncTask # 2 в Android. Так что я пытаюсь сделать, это просто нажать на карту, получить координаты X и Y и передать их классу AsyncTask() для выполнения метода для получения адреса. Вот коды моего одного крана и MyAsyncTask():Android AsyncTask # 2 Fatal Exception
mMapView.setOnSingleTapListener(new OnSingleTapListener() {
public void onSingleTap(float x, float y) {
eventModel.setEventX(String.valueOf(point.getX()));
eventModel.setEventY(String.valueOf(point.getY()));
new MyAsyncTask().execute(eventModel);
CreateEvent.createEventDialog(context, point.getX(),
point.getY(), eventAddress);
Log.i("Addr", eventAddress);
}
});
new MyAsyncTask().execute();
}
public static class MyAsyncTask extends AsyncTask<Event, Integer, Double> {
@Override
protected Double doInBackground(Event... params) {
try {
eventAddress = eventCtrl.getStreetAddressFromGeometry(eventModel.getEventX(), eventModel.getEventY());
eventCtrl.retrieveEventJSON();
if (params.length == 1) {
eventCtrl.createEvent(params[0]);
// Refresh map after successfully added event
eventCtrl.retrieveEventJSON();
eventCtrl.plotEventOnMap(context);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Double result) {
}
protected void onProgressUpdate(Integer... progress) {
}
}
и метод в EventController, чтобы получить адрес, основанный на XY:
public String getStreetAddressFromGeometry(String eventX, String eventY) {
String streetName = "";
try {
URL url = new URL("http://www.onemap.sg/API/services.svc/revgeocode?token=qo/s2TnSUmfLz+32CvLC4RMVkzEFYjxqyti1KhByvEacEdMWBpCuSSQ+IFRT84QjGPBCuz/cBom8PfSm3GjEsGc8PkdEEOEr&location="+eventX+","+eventY+"");
URLConnection conn = (URLConnection) url.openConnection();
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
String responseString;
while ((responseString = br.readLine()) != null) {
try {
JSONObject rawObj = new JSONObject(responseString);
JSONArray searchResults = rawObj.getJSONArray("GeocodeInfo");
for (int i = 0; i < searchResults.length(); i++) {
streetName = searchResults.getJSONObject(i).getString(
"BLOCK")
+ " " + searchResults.getJSONObject(i).getString("ROAD") + " SINGAPORE";
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
}
return streetName;
}
После того как я получить адрес от одного крана, я передать его этому методу:
public static Event createEventDialog(final Context context,
final double x, final double y, final String eventAddress) {
AlertDialog.Builder AddDialog = new AlertDialog.Builder(context);
AddDialog.setTitle("Add Event");
LayoutInflater li = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View dialogView = li.inflate(R.layout.create_event, null);
txtEventName = (EditText) dialogView.findViewById(R.id.txtEventName);
txtEventDesc = (EditText) dialogView.findViewById(R.id.txtEventDesc);
txtEventAddr = (EditText) dialogView.findViewById(R.id.txtEventAddr);
txtEventAddr.setText(eventAddress);
AddDialog.setView(dialogView);
AddDialog.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
}
});
AddDialog.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
}
});
AddDialog.show();
return addEventModel;
}
Однако с этими кодами, я распечатал адрес из одного крана, он показывает адрес. Но когда я запрашиваю диалоговое окно, он должен отображать адрес. Однако, он не показывает ничего, и через несколько секунд, приложение закрыло с сообщением об ошибке:
11-11 17:18:28.889: E/AndroidRuntime(4439): FATAL EXCEPTION: AsyncTask #2
11-11 17:18:28.889: E/AndroidRuntime(4439): java.lang.RuntimeException: An error occured while executing doInBackground()
11-11 17:18:28.889: E/AndroidRuntime(4439): at android.os.AsyncTask$3.done(AsyncTask.java:278)
11-11 17:18:28.889: E/AndroidRuntime(4439): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
11-11 17:18:28.889: E/AndroidRuntime(4439): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
11-11 17:18:28.889: E/AndroidRuntime(4439): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
11-11 17:18:28.889: E/AndroidRuntime(4439): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
11-11 17:18:28.889: E/AndroidRuntime(4439): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
11-11 17:18:28.889: E/AndroidRuntime(4439): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
11-11 17:18:28.889: E/AndroidRuntime(4439): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
11-11 17:18:28.889: E/AndroidRuntime(4439): at java.lang.Thread.run(Thread.java:856)
11-11 17:18:28.889: E/AndroidRuntime(4439): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x0
11-11 17:18:28.889: E/AndroidRuntime(4439): at android.content.res.Resources.getValue(Resources.java:1019)
11-11 17:18:28.889: E/AndroidRuntime(4439): at android.content.res.Resources.getDrawable(Resources.java:663)
11-11 17:18:28.889: E/AndroidRuntime(4439): at Controller.EventController.plotEventOnMap(EventController.java:101)
11-11 17:18:28.889: E/AndroidRuntime(4439): at nyp.edu.eneighbourhood.ENeighbourhoodActivity$MyAsyncTask.doInBackground(ENeighbourhoodActivity.java:213)
11-11 17:18:28.889: E/AndroidRuntime(4439): at nyp.edu.eneighbourhood.ENeighbourhoodActivity$MyAsyncTask.doInBackground(ENeighbourhoodActivity.java:1)
11-11 17:18:28.889: E/AndroidRuntime(4439): at android.os.AsyncTask$2.call(AsyncTask.java:264)
11-11 17:18:28.889: E/AndroidRuntime(4439): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
11-11 17:18:28.889: E/AndroidRuntime(4439): ... 5 more
11-11 17:18:35.725: W/SurfaceView(4439): CHECK surface infomation creating=false formatChanged=false sizeChanged=false visible=false visibleChanged=true surfaceChanged=true realSizeChanged=false redrawNeeded=false left=false top=false
11-11 17:18:37.022: E/WindowManager(4439): Activity nyp.edu.eneighbourhood.ENeighbourhoodActivity has leaked window [email protected] that was originally added here
11-11 17:18:37.022: E/WindowManager(4439): android.view.WindowLeaked: Activity nyp.edu.eneighbourhood.ENeighbourhoodActivity has leaked window [email protected] that was originally added here
11-11 17:18:37.022: E/WindowManager(4439): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:428)
11-11 17:18:37.022: E/WindowManager(4439): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:267)
11-11 17:18:37.022: E/WindowManager(4439): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215)
11-11 17:18:37.022: E/WindowManager(4439): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140)
11-11 17:18:37.022: E/WindowManager(4439): at android.view.Window$LocalWindowManager.addView(Window.java:537)
11-11 17:18:37.022: E/WindowManager(4439): at android.app.Dialog.show(Dialog.java:278)
11-11 17:18:37.022: E/WindowManager(4439): at android.app.AlertDialog$Builder.show(AlertDialog.java:932)
11-11 17:18:37.022: E/WindowManager(4439): at nyp.edu.eneighbourhood.CreateEvent.createEventDialog(CreateEvent.java:124)
11-11 17:18:37.022: E/WindowManager(4439): at nyp.edu.eneighbourhood.ENeighbourhoodActivity$3.onSingleTap(ENeighbourhoodActivity.java:192)
11-11 17:18:37.022: E/WindowManager(4439): at com.esri.android.map.MapOnTouchListener.onSingleTap(Unknown Source)
11-11 17:18:37.022: E/WindowManager(4439): at com.esri.android.map.MapGestureDetector$a.onSingleTapConfirmed(Unknown Source)
11-11 17:18:37.022: E/WindowManager(4439): at android.view.GestureDetector$GestureHandler.handleMessage(GestureDetector.java:393)
11-11 17:18:37.022: E/WindowManager(4439): at android.os.Handler.dispatchMessage(Handler.java:99)
11-11 17:18:37.022: E/WindowManager(4439): at android.os.Looper.loop(Looper.java:137)
11-11 17:18:37.022: E/WindowManager(4439): at android.app.ActivityThread.main(ActivityThread.java:4512)
11-11 17:18:37.022: E/WindowManager(4439): at java.lang.reflect.Method.invokeNative(Native Method)
11-11 17:18:37.022: E/WindowManager(4439): at java.lang.reflect.Method.invoke(Method.java:511)
11-11 17:18:37.022: E/WindowManager(4439): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:982)
11-11 17:18:37.022: E/WindowManager(4439): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
11-11 17:18:37.022: E/WindowManager(4439): at dalvik.system.NativeStart.main(Native Method)
11-11 17:18:38.209: I/Process(4439): Sending signal. PID: 4439 SIG: 9
Спасибо заранее.
Редактировать
AddDialog.setView(dialogView);
AddDialog.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
addEventModel = new Event();
addEventModel = onConfirmAddEventClicked(context, x, y);
new MyAsyncTask().execute(addEventModel);
dialog.dismiss();
}
});
Так вот часть, когда пользователь выбирает Удовлетворительный из диалогового окна, он будет получать входные данные пользователя, в данном случае это было сделано в onConfirmEventClicked. Затем он вызовет MyAsyncTask для выполнения вставки БД.
Не могли бы вы сказать, какая из строк ENeighbourhoodActivity.java:213? – TheRedFox
eventCtrl.plotEventOnMap (контекст); –
** ResourcesNotFoundException ** Проверка ресурсов и идентификаторов –