我正在写一个Android程序的困难情况。所以...: 我在MainActivity中创建了一个GoogleMap对象(theMap)。然后我启动一个名为GetDirections的新Activity,它启动一个名为RequestDirection(非活动)的新类。类RequestDirection执行Google Directions API请求并解析JSON结果以创建一个PolylineOptions对象。那么我如何访问GoogleMap对象(theMap)来添加折线??? 示例代码:
public class MainActivity extends Activity {
public GoogleMap theMap;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationIcon=R.drawable.red_pin;
theMap=((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();
}}
public class GetDirections extends Activity{
//ask user to set Start/Destination Point
RequestDirection req= new RequestDirection();
req.execute();
finish();
}
public class RequestDirection extends AsyncTask {
doInBackground( ){
//returns the json string
}
onPostExecute( ){
PolylineOptions options= (the overview polyline points)
}
}
请注意,所有3个类都没有嵌套。它们是单独的文件
我可以使用mainActivity上下文并将其传递给一个新类,但现在我开始一个新的Activity,并从那里开始实现该类。
我该怎么办?我浪费了一整天而没有解决方案......
添加了dst建议的例外情况:
08-19 03:13:38.127: W/dalvikvm(1871): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
08-19 03:13:38.157: E/AndroidRuntime(1871): FATAL EXCEPTION: main
08-19 03:13:38.157: E/AndroidRuntime(1871): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=0, data=null} to activity {com.ceid.CeidMaps/com.ceid.CeidMaps.MainActivity}: java.lang.NullPointerException
08-19 03:13:38.157: E/AndroidRuntime(1871): at android.app.ActivityThread.deliverResults(ActivityThread.java:3141)
08-19 03:13:38.157: E/AndroidRuntime(1871): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3184)
08-19 03:13:38.157: E/AndroidRuntime(1871): at android.app.ActivityThread.access$1100(ActivityThread.java:130)
08-19 03:13:38.157: E/AndroidRuntime(1871): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1243)
08-19 03:13:38.157: E/AndroidRuntime(1871): at android.os.Handler.dispatchMessage(Handler.java:99)
08-19 03:13:38.157: E/AndroidRuntime(1871): at android.os.Looper.loop(Looper.java:137)
08-19 03:13:38.157: E/AndroidRuntime(1871): at android.app.ActivityThread.main(ActivityThread.java:4745)
08-19 03:13:38.157: E/AndroidRuntime(1871): at java.lang.reflect.Method.invokeNative(Native Method)
08-19 03:13:38.157: E/AndroidRuntime(1871): at java.lang.reflect.Method.invoke(Method.java:511)
08-19 03:13:38.157: E/AndroidRuntime(1871): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
08-19 03:13:38.157: E/AndroidRuntime(1871): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-19 03:13:38.157: E/AndroidRuntime(1871): at dalvik.system.NativeStart.main(Native Method)
08-19 03:13:38.157: E/AndroidRuntime(1871): Caused by: java.lang.NullPointerException
08-19 03:13:38.157: E/AndroidRuntime(1871): at com.ceid.CeidMaps.MainActivity.onActivityResult(MainActivity.java:162)
08-19 03:13:38.157: E/AndroidRuntime(1871): at android.app.Activity.dispatchActivityResult(Activity.java:5192)
08-19 03:13:38.157: E/AndroidRuntime(1871): at android.app.ActivityThread.deliverResults(ActivityThread.java:3137)
08-19 03:13:38.157: E/AndroidRuntime(1871): ... 11 more
答案 0 :(得分:2)
您应该返回GetDirections
活动的折线as a result。然后,您可以在MainActivity
中添加折线。这样,您的用户界面只会从封闭的Activity
进行更新,而不会从另一个Activity
更新(这可能会违反Androids代码风格,尽管可能会这样)。
答案 1 :(得分:0)
如果您知道MainActivity总是首先出现,那么允许访问GoogleMap
对象的简单方法就是static
。例如,而不是public GoogleMap theMap
put public static GoogleMap theMap
。然后,您可以从任何其他类调用MainActivity.theMap
来访问该对象。
如果情况变得更复杂,还有其他更好的方法可以做到这一点,但如果它只是获取对象那么简单,这种方式肯定会有效。