作者lihohsin (新)
看板java
標題[問題] CallBack Listener 問題請教
時間Fri Dec 3 19:21:26 2021
小弟在學習callback listener
參考這個
https://guides.codepath.com/android/Creating-Custom-Listeners#3-implement-listener-callback
練習的代碼如下
MainActivity2.java
public class MainActivity2 extends AppCompatActivity {
Button button2;
TextView textView2;
DataListener listener;
public MainActivity2(){
this.listener=null;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
button2=findViewById(R.id.button2);
textView2=findViewById(R.id.textView2);
textView2.setText(String.valueOf(listener.getData()));
}
public interface DataListener{
int getData();
}
public void setDataListener(DataListener listener){
this.listener = listener;
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity {
Button button;
private int x=5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button =findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i =new Intent();
i.setClass(MainActivity.this,MainActivity2.class);
startActivity(i);
finish();
}
});
MainActivity2 mainActivity2=new MainActivity2();
mainActivity2.setDataListener(new MainActivity2.DataListener() {
@Override
public int getData() {
return x;
}
});
}
}
目標只是想要讓MainActivity2抓到 MainActivity中的x=5
可是執行之後
Caused by: java.lang.NullPointerException: Attempt to invoke interface method
'int bestfood.today.callbackdemo.MainActivity2$DataListner.getData()' on a
null object reference
總是報這行錯誤
常是幾種寫法
都報這個錯誤
有沒有高手知道這個callback listener是哪裡寫錯了?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.34.60.240 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/java/M.1638530491.A.94A.html
1F:→ ssccg: i.setClass(MainActivity.this,MainActivity2.class); 12/04 01:36
2F:→ ssccg: startActivity(i); 這兩行啟動的MainActivity2是系統產 12/04 01:37
3F:→ ssccg: 生的,跟你下面寫的 12/04 01:37
4F:→ ssccg: MainActivity2 mainActivity2=new MainActivity2(); 12/04 01:37
5F:→ ssccg: 是完全不同的MainActivity2的instance,你在你自己new的 12/04 01:38
6F:→ ssccg: instance設listener對系統啟動的instance沒有意義 12/04 01:38
7F:→ ssccg: 原則上Activity間不能用自訂listener,最開始的想法就錯了 12/04 01:39
8F:→ ssccg: 會有這種問題可能對Android四大元件生命週期的概念還不清楚 12/04 01:42
9F:→ ssccg: instance是系統/框架管的不能自己new這點以後你一定還會在 12/04 01:45
10F:→ ssccg: 很多地方碰到 12/04 01:45
11F:推 aiweisen: 方向錯了 你兩個都是activity 要做的應該是 如何透過ac 12/17 06:45
12F:→ aiweisen: tivity 傳遞資料 12/17 06:46
13F:→ aiweisen: 你要在 new intent 那邊put你的x值 然後在activity那邊 12/17 06:47
14F:→ aiweisen: 透過intent get 你的x值 12/17 06:47
16F:→ aiweisen: 暴力一點的方式就是直接把x 在 activityA設成static 就 12/17 06:50
17F:→ aiweisen: 可直接在activityB直接讀x值 12/17 06:50