簡體   English   中英

從另一個類訪問MainActivity對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM