Java 将字符串从类传递到主活动
我试图把某个课程的内容传递给我的主要活动,但似乎不起作用,我不明白为什么。 我在另一个类(不是主活动)上安装了GPS跟踪器,以便重用它。 当位置更改时,我希望我的另一个类从MainActivity中调用一个方法来更新我的UI 我这样总结了我的代码:Java 将字符串从类传递到主活动,java,android,Java,Android,我试图把某个课程的内容传递给我的主要活动,但似乎不起作用,我不明白为什么。 我在另一个类(不是主活动)上安装了GPS跟踪器,以便重用它。 当位置更改时,我希望我的另一个类从MainActivity中调用一个方法来更新我的UI 我这样总结了我的代码: My MAIN ACTIVITY : public class MainActivity extends Activity implements OnClickListener { TextView tv; EditText et; Butto
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
地址:
我真的不知道为什么,最重要的是,如何修复它
我将感谢任何帮助
(注:我的GPS跟踪器工作正常,只是调用了setter()方法。这可能是因为主活动的onCreate()-方法尚未调用。因此,tv仍然为空,导致NullPointerException实例化
MainActivity
的对象不会自动调用onCreate
方法,但当使用意图启动活动时会调用此方法;使用相同的意图可以传递额外值。例如e:
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);
}
}
然后在main活动的onClick
事件中
将返回的文本绑定到TextView
这里有一个问题。main是一个活动,但它应该是调用此对象的main活动
public class Getter {
int _getString;
MainActivity main = new MainActivity();
public void getInfo(int getString) {
_getString = getString * 8;
main.setText(_getString);
}
}
我无法真正理解您在Getter课程中想要实现的目标,但是:
1:将活动实例传递给对象
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获取值(我的选择)
使用应用程序类或创建一个单独的类并在其中声明一个静态变量。使用getter和setter方法获取值。若要从其他类更新MainActivity中的Textview,请从主活动传递Textview引用变量,并在其他类中设置null检查条件。如果Textview不为null,则更新该值。即使my Getter类不是活动?不,在这种情况下,您不需要意图,只需实例化一个对象并调用setter方法,但为了初始化视图(TextView、editbutton等)您确实需要像活动一样调用它,以便可以初始化这些视图。因此,唯一的选项是使用意图?是的!否则,您将如何膨胀布局、查找和初始化视图?
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()));
}
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));
}