簡體   English   中英

從異步任務類到另一個類中獲取價值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM