2013-02-23 114 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,則更新該值。

相關問題