0

我正在尝试将某个类中的某些内容传递给我的 MainActivity,但它似乎不起作用,我不明白为什么。为了重用它,我在另一个类(不是 MainActivity)上有我的 GPS 跟踪器。当位置改变时,我希望我的其他类从 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()));

我真的不知道为什么,最重要的是,如何解决它。

我将不胜感激任何帮助!

(PS:我的 GPS 跟踪器工作正常,只是调用我的 setter() 方法。

4

4 回答 4

0

这可能是因为尚未调用 MainActivity 的 onCreate() 方法。因此电视仍然是 null 导致 NullPointerException

于 2013-02-23T13:38:30.813 回答
0

实例化 ObjectMainActivity不会自动调用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);
    }
}

然后在onClick绑定MainActivity这个返回的文本到TextView

于 2013-02-23T13:42:47.097 回答
0

这里有一个问题。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:在Activity中设置文本,只从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));
}
于 2013-02-23T14:02:15.683 回答
0

使用应用程序类或创建一个单独的类并在其中声明一个静态变量。使用 getter 和 setter 方法获取值。要从其他类更新 mainacivity 中的 Textview,请从主活动传递 texview 引用变量,如果 textview 不为空,则将空检查条件放在其他类中,然后更新值。

于 2013-02-23T14:11:38.867 回答