![](/img/trans.png)
[英]accesing attribute of anobject from another object that belong to the same class
[英]Accesing a MainActivity object from another class
我在編寫Android程序時遇到了困難的情況。 如此..:我在MainActivity中創建了一個GoogleMap對象(theMap)。然后我啟動了一個名為GetDirections的新Activity,並啟動了一個名為RequestDirection(Non-Activity)的新類。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
由於您的GetDirections
活動,您可能應該返回折線。 然后,您可以從MainActivity
添加折線。 這樣,您的UI僅從封閉的Activity
更新,而不是從另一個Activity
(雖然可能會違反Android的代碼樣式)。
如果您知道MainActivity永遠是第一位的,那么允許訪問GoogleMap
對象的一種簡單方法就是使它為static
。 例如,將public static GoogleMap theMap
代替了public GoogleMap theMap
public static GoogleMap theMap
。 然后,可以從任何其他類調用MainActivity.theMap
來訪問該對象。
如果情況變得更加復雜,則可以使用其他更好的方法來完成,但是如果只是獲取對象那么簡單,則此方法肯定會起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.