[英]Passing string from class to main activity
我正在尝试将某个类的内容传递给我的MainActivity,但是它似乎不起作用,我不明白为什么。 我将我的GPS跟踪器放在另一个类(不是MainActivity)上以便重用。 当位置更改时,我希望其他类从MainActivity内调用方法来更新我的UI。
我像这样总结我的代码:
My MAIN ACTIVITY :
public class MainActivity extends Activity implements OnClickListener {
TextView tv;
EditText et;
Button btun;
int arg0;
int stuff;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
et = (EditText) findViewById(R.id.et);
btun = (Button) findViewById(R.id.btun);
btun.setOnClickListener(this);
}
private void setter(int stuff) {
tv.setText(stuff);
}
public void setText(int _stuff) {
_stuff = stuff;
setter(_stuff);
}
@Override
public void onClick(View v) {
Getter get = new Getter();
get.getInfo(Integer.parseInt(et.getText().toString()));
}
另一类:
public class Getter {
int _getString;
MainActivity main = new MainActivity();
public void getInfo(int getString) {
_getString = getString * 8;
main.setText(_getString);
}
}
我最终在LogCat中遇到了一个NullPointerException:
- tv.setText(stuff);
- setter(_stuff);
- main.setText(_getString);
- get.getInfo(Integer.parseInt(et.getText().toString()));
我真的不知道为什么,最重要的是如何解决它。
我将不胜感激!
(附言:我的GPS跟踪器工作正常,只是调用我的setter()方法。
可能是因为尚未调用MainActivity的onCreate()-Method。 因此,电视仍然为null,导致NullPointerException
实例化MainActivity
的对象不会自动调用onCreate
方法,但是在使用Intent
启动活动时会调用此方法; 使用相同的意图,您可以传递额外的值。 例如:
Intent intent = new Intent(context, MainActivity.class);
intent.putExtra("key", value);
context.startActivity(intent);
然后在您的主要活动onCreate
方法中:
String value = getIntent.getStringExtra("key");
编辑:在您的情况下,为什么不更改void getInfo(int getString)
以返回String
值,即
public class Getter {
...
...
public String getInfo(int getString) {
_getString = getString * 8;
return Integer.toString(_getString);
}
}
然后在MainActivity
onClick
事件中将此返回的文本绑定到TextView
一个问题在这里。 main是一个Activity,但应该是调用此对象的MainActivity。
public class Getter {
int _getString;
MainActivity main = new MainActivity();
public void getInfo(int getString) {
_getString = getString * 8;
main.setText(_getString);
}
}
我无法真正弄清您在Getter类中想要达到的目标,但是可以:
1:将Activity实例传递给对象
public class Getter {
int _getString;
MainActivity _main = null;
public Getter(MainActivity main) {
_main = main;
}
public void getInfo(int getString) {
_getString = getString * 8;
_main.setText(_getString);
}
}
@Override
public void onClick(View v) {
Getter get = new Getter(this);
get.getInfo(Integer.parseInt(et.getText().toString()));
}
要么
2:在活动中设置文本,仅从Getter获取值(我的选择)
public class Getter {
int _getString;
MainActivity main = new MainActivity();
public void getInfo(int getString) {
return getString * 8;
}
}
@Override
public void onClick(View v) {
Getter get = new Getter();
int info = get.getInfo(Integer.parseInt(et.getText().toString()));
setText(Integer.toString(info));
}
使用应用程序类或创建单独的类,然后在其中声明一个静态变量。 使用getter和setter方法获取值。 要从其他类更新维护性的Textview,请通过main活动传递texview引用变量,如果textview不为null,则在其他类中放置null检查条件,然后更新该值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.