Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用接口从异步任务onpostexecute获取数据_Java_Android_Interface_Android Asynctask - Fatal编程技术网

Java 使用接口从异步任务onpostexecute获取数据

Java 使用接口从异步任务onpostexecute获取数据,java,android,interface,android-asynctask,Java,Android,Interface,Android Asynctask,您好,我正在尝试从异步任务类到另一个主类获取数据的arraylist: 我一直在遵循下面的答案,但我有点不知所措: 因此,我的类扩展了异步任务并调用数据库以获取对象数组: public class GetVideoInfoFromDataBase extends AsyncTask { // Paginated list of results for song database scan static PaginatedScanList<AlarmDynamoMappi

您好,我正在尝试从异步任务类到另一个主类获取数据的arraylist:

我一直在遵循下面的答案,但我有点不知所措:

因此,我的类扩展了异步任务并调用数据库以获取对象数组:

public class GetVideoInfoFromDataBase extends AsyncTask {

    // Paginated list of results for song database scan
    static PaginatedScanList<AlarmDynamoMappingAdapter> results;

    // The DynamoDB object mapper for accessing DynamoDB.
    private final DynamoDBMapper mapper;

    public interface AlarmsDataBaseAsyncResponse {
        void processFinish(PaginatedScanList<AlarmDynamoMappingAdapter> output);
    }

    public AlarmsDataBaseAsyncResponse delegate = null;

    public GetVideoInfoFromDataBase(AlarmsDataBaseAsyncResponse delegate){
        mapper = AWSMobileClient.defaultMobileClient().getDynamoDBMapper();
        this.delegate = delegate;
    }

    @Override
    protected Object doInBackground(Object[] params) {

        DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();
        results = mapper.scan(AlarmDynamoMappingAdapter.class, scanExpression);
        return results;
    }

    @Override
    public void onPostExecute(Object obj) {

        delegate.processFinish(results);

    }
}
它想让我这样投:

(GetVideoInfoFromDataBase) new GetVideoInfoFromDataBase(new GetVideoInfoFromDataBase.AlarmsDataBaseAsyncResponse()
这似乎不对,但我想我会检查一下

  • 我不确定重写onprocessfinished时如何返回结果

  • 提前感谢您的帮助

    修改类的构造函数。 需要默认构造函数。顺便说一下,创建方法来设置接口

    public void setInterface(AlarmsDataBaseAsyncResponse delegate){
             this.delegate = delegate;}
    
    在MainActivity中,将逻辑推入:

      object.setInterface(new AlarmsDataBaseAsyncResponse(){
            @Override
            public void processFinish(PaginatedScanList<AlarmDynamoMappingAdapter> output) {
                  //your logic
            }
      });
    
    object.setInterface(新的AlarmsDataBaseAsyncResponse(){
    @凌驾
    public void processFinish(PaginatedScanList输出){
    //你的逻辑
    }
    });
    
    首先创建一个接口

    public interface AsyncInterface {
        void response(String response);
    }
    
    在asynctask类中分配它,如下所示:-

    Context context;
    Private AsyncInterface asyncInterface;
    
    AsyncClassConstructor(Context context){
        this.context = context;
        this.asyncInterface = (AsyncInterface) context;
    }
    
    然后在asynctask类的onPostExecute方法中:-

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        asyncInterface.response(s);
    }
    
    然后在活动中实现此接口:-

    class MainActivity extends AppCompatActivity implements AsyncInterface {
    
    然后导入异步接口的方法

    @Override
    public void response(String response) {
        //Here you get your response
        Log.e(TAG, response);
    }
    

    访问这个@skadoosh,它不包括任何关于接口的内容?它是关于AsyncTask的参数的,因为您当前的实现在参数方面是不正确的。我不理解您的解决方案。在我的代码中,第一部分似乎是alreeady。您错过了默认构造函数的子类中的方法super,所以最后一部分重写响应调用异步类?我不确定它是如何运行的?在完成后台任务后,AsyncTask类一旦返回到PostExecute方法,它将使用interfaceOk将结果数据发送到mainactivity,但如何调用async类?调用新的AsyncClass(context,?)时,它要求将上下文和AsyncInterface作为参数。很抱歉,我错误地在其中添加了AsyncInterface。您应该只将其中的上下文作为新的AsyncClass(MainActivity.this)传递
    class MainActivity extends AppCompatActivity implements AsyncInterface {
    
    @Override
    public void response(String response) {
        //Here you get your response
        Log.e(TAG, response);
    }