从异步任务类获取值到另一个类

时间:2018-01-09 05:54:59

标签: java android android-asynctask

This is the error

这是我的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());


}
}

3 个答案:

答案 0 :(得分:1)

您必须注册回调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());


    }
}

不要使用静态回调。您可以通过实施asyncResponseAnonymous在您的调用类中实现。 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
    }
}

建议 - 关注naming convention in java以使代码更具可读性。

答案 1 :(得分:0)

在Android Studio中,而不是尝试覆盖您自己尝试的方法,看看Android Studio是否会为您执行此操作,因此我会复制您的旧方法代码,然后删除。转到要实现的界面,然后按Alt + Enter,然后您将看到“实施方法”。一旦你这样做,你的方法不应该有任何冲突的错误,让我知道这是否有效:)

答案 2 :(得分:0)

您的类AsyncStatus和类试用版是否在同一个包中?如果没有,您的AsyncStatus无法访问您的trialmenu方法,或将方法processFinish更改为public。