[問題] CallBack Listener 問題請教

看板java作者 (新)時間2年前 (2021/12/03 19:21), 編輯推噓1(1016)
留言17則, 2人參與, 2年前最新討論串1/1
小弟在學習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://www.ptt.cc/bbs/java/M.1638530491.A.94A.html

12/04 01:36, 2年前 , 1F
i.setClass(MainActivity.this,MainActivity2.class);
12/04 01:36, 1F

12/04 01:37, 2年前 , 2F
startActivity(i); 這兩行啟動的MainActivity2是系統產
12/04 01:37, 2F

12/04 01:37, 2年前 , 3F
生的,跟你下面寫的
12/04 01:37, 3F

12/04 01:37, 2年前 , 4F
MainActivity2 mainActivity2=new MainActivity2();
12/04 01:37, 4F

12/04 01:38, 2年前 , 5F
是完全不同的MainActivity2的instance,你在你自己new的
12/04 01:38, 5F

12/04 01:38, 2年前 , 6F
instance設listener對系統啟動的instance沒有意義
12/04 01:38, 6F

12/04 01:39, 2年前 , 7F
原則上Activity間不能用自訂listener,最開始的想法就錯了
12/04 01:39, 7F

12/04 01:42, 2年前 , 8F
會有這種問題可能對Android四大元件生命週期的概念還不清楚
12/04 01:42, 8F

12/04 01:45, 2年前 , 9F
instance是系統/框架管的不能自己new這點以後你一定還會在
12/04 01:45, 9F

12/04 01:45, 2年前 , 10F
很多地方碰到
12/04 01:45, 10F

12/17 06:45, 2年前 , 11F
方向錯了 你兩個都是activity 要做的應該是 如何透過ac
12/17 06:45, 11F

12/17 06:46, 2年前 , 12F
tivity 傳遞資料
12/17 06:46, 12F

12/17 06:47, 2年前 , 13F
你要在 new intent 那邊put你的x值 然後在activity那邊
12/17 06:47, 13F

12/17 06:47, 2年前 , 14F
透過intent get 你的x值
12/17 06:47, 14F

12/17 06:49, 2年前 , 15F

12/17 06:50, 2年前 , 16F
暴力一點的方式就是直接把x 在 activityA設成static 就
12/17 06:50, 16F

12/17 06:50, 2年前 , 17F
可直接在activityB直接讀x值
12/17 06:50, 17F
文章代碼(AID): #1XgVsxbA (java)