Java 如何访问上一个活动中的数据?
使用Java 如何访问上一个活动中的数据?,java,android,Java,Android,使用StartActivity我从FirstActivity到达了SecondActivity。现在我想访问上一个activity中声明的对象 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //TODO handle here. } 我
StartActivity
我从FirstActivity到达了SecondActivity。现在我想访问上一个activity中声明的对象
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//TODO handle here.
}
我不能在我想要传递的对象(DropboxAPI)上使用可分发,因为我没有它的源(我不能使它可分发)
我可以通过FirstActivity。这是因为我可以使用intent?或类似的方法将其打包
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;
}
}
第二类代码:
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();
}
日志:
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)
解决方案:
使用StartActivityforResult,将数据移回第二个活动到第一个活动
其中一个示例是数据从第二个活动移动到第一个活动-
解决方案:
使用StartActivityforResult,将数据移回第二个活动到第一个活动
其中一个示例是数据从第二个活动移动到第一个活动-
执行以下操作:
使用startActivityForResult()启动活动
在开始的活动完成之前,在开始的活动中,创建一个意图,并将任何您想要作为额外内容传回的数据放在意图中。现在调用setResult(…,intent)
在开始活动中,实现ActivityResult()
,并处理开始活动的结果。将向您传递一个意图
,该意图是您在已启动活动中添加额外内容的意图
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//TODO handle here.
}
执行以下操作:
使用startActivityForResult()启动活动
在开始的活动完成之前,在开始的活动中,创建一个意图,并将任何您想要作为额外内容传回的数据放在意图中。现在调用setResult(…,intent)
在开始活动中,实现ActivityResult()
,并处理开始活动的结果。将向您传递一个意图
,该意图是您在已启动活动中添加额外内容的意图
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//TODO handle here.
}
尝试使用应用程序类:
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);
private MyApplication app;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app = (MyApplication)getApplication(); //Get Application
DropboxClient dropboxclient=app.getName();//Access global value
在MySecondActivity活动中:
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);
private MyApplication app;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app = (MyApplication)getApplication(); //Get Application
DropboxClient dropboxclient=app.getName();//Access global value
尝试使用应用程序类:
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);
private MyApplication app;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app = (MyApplication)getApplication(); //Get Application
DropboxClient dropboxclient=app.getName();//Access global value
在MySecondActivity活动中:
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);
private MyApplication app;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app = (MyApplication)getApplication(); //Get Application
DropboxClient dropboxclient=app.getName();//Access global value
扩展应用程序
类,声明并初始化该类中的跨活动对象,并为这些对象编写getter
现在在activty中使用以下代码,您可以访问这些对象
getApplication().getMyObject().doSomeAction();
记住,您必须修改您的androidManifest.xml来告诉android您的扩展应用程序类。扩展应用程序
类,声明并初始化该类中的跨活动对象,并为这些对象编写getter
现在在activty中使用以下代码,您可以访问这些对象
getApplication().getMyObject().doSomeAction();
请记住,您必须修改您的androidManifest.xml来告诉android您的扩展应用程序类。在调试模式下app=(MyApplication)getApplication();正在出错。。06-28 02:06:17.066:E/AndroidRuntime(699):java.lang.ClassCastException:android.app。Application@AmelJose:并确保已将应用程序类添加到manifast.xml中对不起,这对清单有效吗?temp是应用程序类的名称如果您在实现应用程序类时遇到任何问题,那么只需在调试模式app=(MyApplication)getApplication()下下载这个简单的示例即可;正在出错。。06-28 02:06:17.066:E/AndroidRuntime(699):java.lang.ClassCastException:android.app。Application@AmelJose:并确保已将应用程序类添加到manifast.xml中对不起,这对清单有效吗?temp是应用程序类的名称如果您在实现应用程序类时遇到任何问题,请下载这个简单的示例