2013-08-19 141 views
1

我有一个Android程序即时编写的困难情况。所以..: 我在MainActivity中创建了一个GoogleMap对象(theMap)。然后我启动一个名为GetDirections的新Activity,它启动一个名为RequestDirection(Non-Activity)的新类。RequestDirection类执行Google Directions API请求并解析JSON结果创建一个PolylineOptions对象。那么我怎样才能访问GoogleMap对象(theMap)来添加折线? 示例代码:访问另一个类的MainActivity对象

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类不nested.they是独立的文件

我可以用mainActivity上下文并将其传递到一个新的类,但现在我开始一个新的活动,我istantiate从那里上课。

我能做什么?我浪费了一整天,没有解决方案..


增加了对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

哪一行是'MainActivity.java:162'? – dst

+0

PolylineOptions opt = data.getParcelableExtra(“options”); 这是在OnActivityResult覆盖内 – GreekBurner

+0

在这种情况下,'data'为空。验证结果代码是否与您在['setResult']中设置的结果代码相同(http://developer.android.com/reference/android/app/Activity.html#setResult%28int,%20android.content.Intent%29) ,并且你在那里设置的'Intent data'参数是非空的。 – dst

回答

2

你或许应该回到你的GetDirections活动的折线as a result。然后,您可以从MainActivity内添加多段线。这样你的用户界面只会从附件Activity更新,而不是从另一个Activity更新(虽然它可能会违反Androids的代码风格)。

+0

我也试过了,但我有一些nullexception错误..我认为这个问题是在后台运行的asynctask .. – GreekBurner

+0

@GreekBurner请添加例外问题(logcat) – dst

+0

好吧:我试图传递GetDirections上下文作为参数req creation.And在onPostExecute我调用((GetDirections )上下文)。。getIntent()putExtra( “选项”,optionspolyline);并在主Activity上完成() 我使用getParcelableExtra(“options”)实现了OnActivityResult; – GreekBurner

0

如果您知道您的MainActivity始终是第一位的,则允许访问GoogleMap对象的一种简单方法是创建static。例如,而不是public GoogleMap theMappublic static GoogleMap theMap。然后从任何其他课程,您可以拨打MainActivity.theMap访问该对象。

如果情况变得更加复杂,还有其他更好的方法可以做到,但如果只是获得对象那么简单,这种方式肯定会奏效。

+0

我知道这是我第一件尝试..但这不帮助我因为MainActivity不首先总是,所以我必须尝试另一种解决方案。无论如何Thx! :) – GreekBurner

+1

请不要在任何情况下使用此方法,因为即使“MainActivity”在以常规方式调用应用程序时第一次出现,它有可能会被操作系统破坏(或其他不好的事情发生)。这不是Android打算使用的方式。 – dst