Reputation: 9101
In my application I need a variable from one activity to another activity without using any intent. So I have declared that variable as static and used as FirstActivity.a
but this is returning so null, Hence I have created a class that extends application and declared that variable there still I am getting null. no clue how to achieve this.
Googled a lot but everyone are suggesting either to use static or extend Application class, unfortunately both are not working for me.
Application class:
public class ApplicationClass extends Application{
private String StockName;
public String getStockName() {
return StockName;
}
public void setStockName(String stockName) {
StockName = stockName;
}
}
Setting the variable in one activity as:
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"));
}
Retriving the variable in another class as:
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();
I'm not sure how to achieve this.
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;
Upvotes: 2
Views: 26166
Reputation: 1212
You should define your subclassed application class in your manifest. And you should never call "new ApplicationClass()". You can get a reference to ApplicationClass instance using activity's getApplication() method.
Detail.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");
}
}
Table.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();
}
Instantiate Table.java
public NewActivity extends Activity{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Table t = new Table(this);
}
}
Upvotes: 3
Reputation: 4856
[Edited]
Since you're saying that there is a value returned from this line getIntent().getExtras().getString("StockName")
, then try this code:
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");
}
Now access the static object in Table class:
public class Table {
Context c1;
Cursor c;
public String selectdate="Select " + column1 + " as _id, " + column2 + " From " + tablename + " Where " + column3 + " = " + Detail.stringValue;
}
This should work properly. Make sure you're accessing the stringValue
variable after the Detail
activity is created.
[Original Answer]
Try this:
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"));
}
Now access the static object in Table
class:
public class Table {
Context c1;
Cursor c;
public String selectdate="Select " + column1 + " as _id, " + column2 + " From " + tablename + " Where " + column3 + " = "
+ Detail.ac.getStockName();
}
P.S. To access the static object/variable, follow this syntax:
Class_Name.Object_Name.Method_Name();
Upvotes: 2
Reputation: 6166
Try this.
Step 1: Create a static Bundle object in Application class.( ApplicationClass.java)
E.g :
public static Bundle mMyAppsBundle = new Bundle():
Step 2:
Set key values pair in that bundle from anywhere. like this:
ApplicationClass.mMyAppsBundle.putString("key","value");
Step 3:
Now you can get these values from anywhere like this way:
String str = ApplicationClass.mMyAppsBundle.getString("key");
Please apply null check before using bundle objects for safety points of view.
Upvotes: 1
Reputation: 3684
Try to initialize firstly your class. But what I see you want to have some application context that is accessible via application. For that porpouse you can simply use that method but data try to keep in SharedPreferences
. So simply when you get sth from ApplicationClass
you simply get it firstly from shared preferences and return. :) And each time when you need your ApplicationClass you initialize it and there methods run shared preferences to get data.
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"));
}
Shared preferences context class.
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;
}
}
Upvotes: 0