欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android不同activity之间共享数据解决方法

程序员文章站 2023-12-05 17:45:58
最近做局域网socket连接问题,要在多个activity之间公用一个socket连接,就在网上搜了下资料,感觉还是application方法好用,帖出来分享下! andr...
最近做局域网socket连接问题,要在多个activity之间公用一个socket连接,就在网上搜了下资料,感觉还是application方法好用,帖出来分享下!
android中在不同activity中传递变量,通常使用intent中bundle添加变量的操作方法。
保存参数时:
复制代码 代码如下:

intent intent = new intent();
intent.setclass(a.this, b.class);
bundle bundle = new bundle();
bundle.putstring("name", "xiaozhu");
intent.putextras(bundle);
startactivity(intent);

读取参数:
复制代码 代码如下:

intent intent = this.getintent();
bundle bundle = intent.getextras();
string name = bundle.getstring("name");
[java] view plaincopy
intent intent = this.getintent();
bundle bundle = intent.getextras();
string name = bundle.getstring("name");

不过在多个activity中经常使用同一变量时,使用bundle则比较麻烦,每次调用activity都需要设置一次。
如想在整个应用中使用,在java中一般是使用静态变量,而在android中有个更优雅的方式是使用application context。
新建一个类,继承自application
复制代码 代码如下:

class myapp extends application {
private string mystate;
public string getstate() {
return mystate;
}
public void setstate(string s) {
mystate = s;
}
}

在androidmanifest.xml的application加个name属性就可以了,如下面所示:
复制代码 代码如下:

<application android:name=".myapp" android:icon="@drawable/icon" android:label="@string/app_name">

使用时:
复制代码 代码如下:

class blah extends activity {
@override
public void oncreate(bundle b){
...
myapp appstate = ((myapp)getapplicationcontext());
string state = appstate.getstate();
...
}
}