在我的应用程序中,我需要从一个活动到另一个活动的变量,而无需使用任何意图。所以我将该变量声明为静态并用作FirstActivity.a
但这返回如此空,因此我创建了一个扩展应用程序的类并声明该变量仍然我得到空。不知道如何实现这一目标。
谷歌了很多,但每个人都建议使用静态或扩展应用程序类,不幸的是两者都不适合我。
应用类:
public class ApplicationClass extends Application{
private String StockName;
public String getStockName() {
return StockName;
}
public void setStockName(String stockName) {
StockName = stockName;
}
}
将一个活动中的变量设置为:
public class Detail extends Activity{
ApplicationClass ac;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.stockdetail);
ac=new ApplicationClass();
ac.setStockName(getIntent().getExtras().getString("StockName"));
}
检索另一个类中的变量,如下所示:
public class Table {
Context c1;
Cursor c;
ApplicationClass ac=new ApplicationClass();
public String selectdate="Select " + column1 + " as _id, " + column2 + " From " + tablename + " Where " + column3 + " = "
+ ac.getStockName();
我不知道如何实现这一目标。
编辑
public class Detail extends Activity{
public static sname;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.stockdetail);
sname=getIntent().getExtras().getString("StockName");
}
public class Table {
Context c1;
Cursor c;
public String selectdate="Select " + column1 + " as _id, " + column2 + " From " + tablename + " Where " + column3 + " = "
+ Detail.sname;
应在清单中定义子类化应用程序类。而且你永远不应该调用"new ApplicationClass()"。您可以使用活动的 getApplication() 方法获取对 ApplicationClass 实例的引用。
详情.java:
public class Detail extends Activity{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.stockdetail);
ApplicationClass app = (ApplicationClass)getApplication();
app.setStockName("blah");
}
}
表.java
public class Table {
public String selectDate;
public Table(Activity a)
{
ApplicationClass ac=(ApplicationClass)a.getApplication();
selectdate="Select " + column1 + " as _id, " + column2 + " From " + tablename + " Where " + column3 + " = "
+ ac.getStockName();
}
实例化表.java
public NewActivity extends Activity{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Table t = new Table(this);
}
}
[已编辑]
既然你说从这行返回了一个值 getIntent().getExtras().getString("StockName")
,那么试试这段代码:
public class Detail extends Activity{
public static String stringValue; //make it public and static
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.stockdetail);
stringValue = getIntent().getExtras().getString("StockName");
}
现在访问 Table 类中的静态对象:
public class Table {
Context c1;
Cursor c;
public String selectdate="Select " + column1 + " as _id, " + column2 + " From " + tablename + " Where " + column3 + " = " + Detail.stringValue;
}
这应该可以正常工作。请确保在创建Detail
活动后访问stringValue
变量。
[原答案]
试试这个:
public class Detail extends Activity{
public static ApplicationClass ac; //make it public and static
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.stockdetail);
ac=new ApplicationClass();
ac.setStockName(getIntent().getExtras().getString("StockName"));
}
现在访问类Table
静态对象:
public class Table {
Context c1;
Cursor c;
public String selectdate="Select " + column1 + " as _id, " + column2 + " From " + tablename + " Where " + column3 + " = "
+ Detail.ac.getStockName();
}
附言若要访问静态对象/变量,请遵循以下语法:
Class_Name.Object_Name.Method_Name();
试试这个。
步骤 1:在应用程序类中创建静态捆绑对象(应用程序类.java)
例如:
public static Bundle mMyAppsBundle = new Bundle():
第 2 步:
从任何位置设置该捆绑包中的键值对。喜欢这个:
ApplicationClass.mMyAppsBundle.putString("key","value");
第 3 步:
现在,您可以像这样从任何地方获取这些值:
String str = ApplicationClass.mMyAppsBundle.getString("key");
从安全角度考虑,请在使用捆绑对象之前应用空检查。
尝试先初始化你的类。但是我看到您希望有一些可通过应用程序访问的应用程序上下文。对于那只海豚,您可以简单地使用该方法,但数据会尝试保留在SharedPreferences
中。因此,当您从ApplicationClass
那里获得sth时,您只需首先从共享的偏好中获取并返回即可。:)每次需要应用程序类时,您都会对其进行初始化,并且有方法运行共享首选项来获取数据。
public class Detail extends Activity{
ApplicationClass ac = new ApplicationClass();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.stockdetail);
ac=new ApplicationClass();
ac.setStockName(getIntent().getExtras().getString("StockName"));
}
共享首选项上下文类。
public ApplicationClassWithSharedPreferences{
private Context context;
public ApplicationClassWithSharedPreferences(Context c){
context = c;
}
public String getSomeValueFromContext(){
SharedPreferences sharedPref = context.getPreferences(Context.MODE_PRIVATE);
String highScore = sharedPref.getString("KEY", "DEFAULT");
return highScore;
}
}