2013-02-23 99 views
0

我试图从一个类传递给我的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())); 

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

我会感谢任何帮助!

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

回答

0

Instantiaing的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)到即

public class Getter { 
... 
... 

    public String getInfo(int getString) { 
     _getString = getString * 8; 
     return Integer.toString(_getString); 
    } 
} 

,然后返回一个值StringonClick事件MainActivity将此返回的文本绑定到TextView

+0

即使我的Getter类不是一项活动? – 2013-02-23 13:44:50

+0

nope,在这种情况下,你不需要一个意图,只是实例化一个对象并调用setter方法 – Waqas 2013-02-23 13:45:44

+0

但为了初始化视图(文本视图,编辑按钮等),你需要将它称为一个活动,以便这些视图可以初始化 – Waqas 2013-02-23 13:47:05

0

这也许是因为在MainActivity的onCreate() - 方法还没有被调用因此,电视仍然是。空导致空指针异常

0

这里有一个问题。 main是一个Activity,但它应该是调用此对象的MainActivity。

public class Getter { 

int _getString; 
MainActivity main = new MainActivity(); 

public void getInfo(int getString) { 
    _getString = getString * 8; 
    main.setText(_getString); 
    } 
} 

我真的不能做出来你正试图在吸气剂类来实现的,但无论是:

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获取值(我的选择)

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)); 
} 
0

使用Application Class或创建一个单独的Class并在其中声明一个静态变量。使用getter & setter方法来获取值。要从其他类的mainacivity中更新Textview,从主活动传递texview引用变量,并在其他类中放置null检查条件,如果textview不为null,则更新该值。