[英]Getting value from async task class to another class
這是我的asyncResponse.java
public interface asyncResponse {
void processFinish(String output);
}
這是我的trialmenu.java,我要在其中檢索我的值
abstract class trialmenu extends AppCompatActivity implements asyncResponse{
private ImageView logo;
private TextView status;
AsyncStatus asyncTask =new AsyncStatus();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newmenulayout);
logo = (ImageView) findViewById(R.id.imglogo);
status = (TextView) findViewById(R.id.txtStatus);
AsyncStatus.delegate = this;
}
void processFinish(String output) {
status.setText(output);
}
}
這是我的AsyncStatus.java,出於隱私原因,我尚未發布doInBackground
public class AsyncStatus extends AsyncTask<String, String, StringBuilder> {
public static asyncResponse delegate=null;
@Override
protected void onPostExecute(StringBuilder result) {
super.onPostExecute(result);
delegate.processFinish(result.toString());
}
}
您必須將回調注冊到AsyncTask
類。
public class AsyncStatus extends AsyncTask<String, String, StringBuilder> {
public asyncResponse delegate=null;
public void setDelegate(asyncResponse delegate){
this.delegate=delegate;
}
@Override
protected void onPostExecute(StringBuilder result) {
super.onPostExecute(result);
delegate.processFinish(result.toString());
}
}
不要使用靜態回調。 您可以通過實現asyncResponse
或通過Anonymous
在調用類中實現。 並且processFinish()
實現必須使用@Override
注釋公開 。
abstract class trialmenu extends AppCompatActivity implements asyncResponse {
private ImageView logo;
private TextView status;
AsyncStatus asyncTask = new AsyncStatus();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newmenulayout);
logo = (ImageView) findViewById(R.id.imglogo);
status = (TextView) findViewById(R.id.txtStatus);
asyncTask.setDelegete(this);
}
@Override
public void processFinish(String output) {
// Callback
}
}
建議 -遵循Java中的命名約定以使代碼更具可讀性。
在Android Studio中,不要嘗試重寫自己的方法,而是嘗試查看Android Studio是否會為您執行此操作,因此我將復制您的舊方法代碼,然后刪除。 轉到您要實現的界面,然后按Alt + Enter,然后應該看到“實施方法”。 一旦這樣做,您的方法就不會出現任何沖突的錯誤,請讓我知道是否可行:)
您的類AsyncStatus和類trialmenu是否在同一軟件包中? 否則,您的AsyncStatus無法訪問您的trialmenu方法,或將方法processFinish更改為public。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.