前言:
在開發的過程中,一些方法可能經常需要用到,但我們不可能每次都寫一遍,這時候我們需要建立一個公共的類,在這個類裡面寫上方法,然後用public static修飾,可是當這個方法執行的是耗時操作的時候,我們需要開啟子線程,可是在子線程裡又不可以使用return,這是我們就需要使用java的回調機制來解決這個問題。
操作步驟:
1.建立一個回調接口
2.建立類,編寫帶有回調的方法。
3.在java代碼中調用建立類中的方法。
效果展現:
代碼實作:
1.建立一個回調接口
public interface SumCallbackListener {
//建立一個回調方法
void onfinish(int sum);
}
2.建立類,編寫帶有回調的方法。
public class CalculateUtil {
//param1:傳過來的輸入的值 param2:建立回調對象
public static void requestCalculateSum(final int number,final SumCallbackListener listener){
//開啟子線程,在這裡隻是模拟耗時操作
new Thread(new Runnable() {
@Override
public void run() {
int result = ;
for(int i =;i<=number;i++){
result+= i;
}
//回調onfinish()方法
listener.onfinish(result);
}
}).start();
}
}
3.在java代碼中調用建立類中的方法。
1.首先是我的界面布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.networktest.Main2Activity">
<EditText
android:id="@+id/main_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="請輸入一個正整數"
android:inputType="number"/>
<Button
android:id="@+id/main_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="0到這個數之間的所有整數和求和"/>
<TextView
android:id="@+id/main_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="結果"
android:gravity="center"
android:textSize="25sp"/>
</LinearLayout>
2.java代碼部分:
public class Main2Activity extends AppCompatActivity {
private EditText inputEt;
private Button calculateBtn;
private TextView resultTv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
bindID();
calculateBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int input = Integer.parseInt(inputEt.getText().toString());
//調用公共類的公共方法
CalculateUtil.requestCalculateSum(input, new SumCallbackListener() {
@Override
public void onfinish(int sum) {
//根據回調的内容執行具體的方法
resultTv.setText(sum+"");
}
});
}
});
}
private void bindID() {
inputEt = findViewById(R.id.main_et);
calculateBtn = findViewById(R.id.main_btn);
resultTv = findViewById(R.id.main_tv);
}
}