访问另一个类中活动中的变量



在我的应用程序中,我需要从一个活动到另一个活动的变量,而无需使用任何意图。所以我将该变量声明为静态并用作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;
   }
}

最新更新