2012-06-27 17 views
0

使用StartActivity我從FirstActivity獲得了SecondActivity。現在我想訪問前一個活動中聲明的對象。如何訪問以前活動中的數據?

是否有任何明顯的機制,我missing.I無法使用Parceable對象(DropboxAPI)我想通過,因爲我沒有它的來源(我不能讓parceable)。

我可以通過FirstActivity.this,因爲我可以用Parceable意圖使它或類似

Intent intent=new Intent(FirstActivity.this,SecondActivity.class); 
    intent.putExtra("MyClass",FirstActivity.this); 
    startActivity (intent); 

import com.dropbox.client2.DropboxAPI; 
import com.dropbox.client2.android.AndroidAuthSession; 

import android.app.Application; 
import android.hardware.Camera.Parameters; 
import android.os.Parcel; 
import android.os.Parcelable; 
public class temp extends Application { 

    DropboxAPI<AndroidAuthSession> mApi; 
    public void onCreate() { 
     super.onCreate(); 
    } 

    temp(DropboxAPI<AndroidAuthSession> Api) 
    { 
     mApi=Api; 
    } 
    public DropboxAPI<AndroidAuthSession> getName() {  
     return mApi; 
} 
    public void setName(DropboxAPI<AndroidAuthSession> dropboxclient) { 
     this.mApi = dropboxclient; 
} 
} 

守則第一類:

t = (temp)getApplication(); 
       t.setName(mApi); 
       //basket.putParcelable("key", MCActivity.this); 
       Intent intent=new Intent(MCActivity.this,DownActivity.class); 
       //intent.putExtra("MyClass",t); 
       startActivity (intent); 

碼在第二類:

public void onCreate(Bundle bun) { 

    // TODO Auto-generated method stub 
    super.onCreate(bun); 
    setContentView(R.layout.download); 
    mImage = (ImageView)findViewById(R.id.image_view); 
    //Bundle gotit=getIntent().getExtras(); 
    t = (temp)getApplication(); 
    int i=2; 
    i=5; 
    dApi=t.getName(); 
} 

Logcat:

06-28 02:24:31.979: I/System.out(729): debugger has settled (1308) 
06-28 02:25:08.387: D/AndroidRuntime(729): Shutting down VM 
06-28 02:25:08.387: W/dalvikvm(729): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
06-28 02:25:08.705: E/AndroidRuntime(729): FATAL EXCEPTION: main 
06-28 02:25:08.705: E/AndroidRuntime(729): java.lang.ClassCastException: android.app.Application 
06-28 02:25:08.705: E/AndroidRuntime(729): at cloud.mobile.MCActivity$3.onClick(MCActivity.java:164) 
06-28 02:25:08.705: E/AndroidRuntime(729): at android.view.View.performClick(View.java:2408) 
06-28 02:25:08.705: E/AndroidRuntime(729): at android.view.View$PerformClick.run(View.java:8816) 
06-28 02:25:08.705: E/AndroidRuntime(729): at android.os.Handler.handleCallback(Handler.java:587) 
06-28 02:25:08.705: E/AndroidRuntime(729): at android.os.Handler.dispatchMessage(Handler.java:92) 
06-28 02:25:08.705: E/AndroidRuntime(729): at android.os.Looper.loop(Looper.java:123) 
06-28 02:25:08.705: E/AndroidRuntime(729): at android.app.ActivityThread.main(ActivityThread.java:4627) 
06-28 02:25:08.705: E/AndroidRuntime(729): at java.lang.reflect.Method.invokeNative(Native Method) 
06-28 02:25:08.705: E/AndroidRuntime(729): at java.lang.reflect.Method.invoke(Method.java:521) 
06-28 02:25:08.705: E/AndroidRuntime(729): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
06-28 02:25:08.705: E/AndroidRuntime(729): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
06-28 02:25:08.705: E/AndroidRuntime(729): at dalvik.system.NativeStart.main(Native Method) 

回答

1

執行以下操作,

開始startActivityForResult()

startActivityForResult(0, MyActivity.class); 

在開始活動完成之前,在開始的活動中創建一個意圖,並將想要傳回的任何數據作爲附加內容傳遞給意圖。現在致電setResult(..., intent);

Intent resultIntent = new Intent(); 
resultIntent.putExtra("myKey", myVal); 
setResult(0, resultIntent); 
在你的出發活動

,實施onActivityResult(),並辦理開工活動的結果。您將通過一個Intent,這是您在已開始的活動中添加附加功能的意圖。

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    //TODO handle here.  
} 
2

嘗試使用應用類:

public class MyApplication extends Application { 
    //Variable we want to share to All Activities in Application 

    private DropboxClient dropboxclient; 

    @Override 
    public void onCreate() { 
      super.onCreate(); 

    } 
    //Getter Method 
    public DropboxClient getName() {  
      return dropboxclient; 
    } 
    //Setter Method 
    public void setName(DropboxClient dropboxclient) { 
      this.dropboxclient = dropboxclient; 
    } 
} 

在MyFirstActivity活動:

private MyApplication app; 
@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     app = (MyApplication)getApplication(); //Get Application 
     app.setName(dropboxclient); 
     Intent intent = new Intent(); 
     intent.setClass(this, MySecondActivity.class); 
     startActivity(intent); 

在MySecondActivity活動:

private MyApplication app; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      app = (MyApplication)getApplication(); //Get Application 
      DropboxClient dropboxclient=app.getName();//Access global value 
+0

在調試模式app =(MyApplication)getApplication();出現錯誤.. 06-28 02:06:17.066:E/AndroidRuntime(699):java.lang.ClassCastException:android.app.Application –

+0

@AmelJose:plz用應用程序代碼編輯您的文章 –

+0

@AmelJose:and確保你已經將你的應用程序類添加到了manifast.xml –

1

擴展Application類,並聲明nd在這個類中初始化你的交叉活動對象併爲這些對象編寫getters。

現在在活動中使用以下代碼,您可以訪問這些對象。記住,你必須修改你的androidManifest.xml來告訴android你的擴展應用程序類。