AsyncTask onPostExecute没有完全获得结果

时间:2014-08-03 23:43:31

标签: android android-asynctask google-cloud-datastore

我有一个Android应用程序,我试图将一些照片存储为Blob。我设法把照片放在数据库上。但我还想保留特定用户拍摄的照片列表。因此,在我将照片上传到具有AsyncTask的数据库后,如下所示;

InsertPhotoTask ipt = new InsertPhotoTask();
ipt.setPhotoToUpload(pic);
ipt.execute(getApplicationContext());

我想将新生成的照片ID添加到用户的照片列表中。我在上面的AsyncTask的onPostExecute方法中执行以下操作;

@Override
protected void onPostExecute(Photo result) {
    if(result.getId() == null){
        Log.i("DELEGATED_PHOTO", "WTF");
    }
    localUser.getPhotos().add(result.getId());
}

但我每次都会看到WTF日志消息。在我的应用程序控制台的数据存储查看器中,我可以看到添加了照片并分配了ID。那么onPostExecute是否应该能够看到结果呢?顺便说一句,onPostExecute中的结果不为null。我可以到达Photo实体的其他领域。只有getId返回null。 Photo是一个类似于App Engine文档中解释的Entity类。我按照建议自动生成enpoint库。为了完整性,这是我的Photo实体类的相关部分;

@Entity
public class Photo {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private Blob thumbnail;
    private Blob image;
    private String imgType;
    private Date takingDate;
    private List<Integer> scores = new ArrayList<Integer>();

    public long getId(){
        return this.id;
    }
    ...

关于通过ID获取某个实体的大多数问题都是询问Python而我无法将它们连接到我的案例。

1 个答案:

答案 0 :(得分:0)

在ipt.execute()之后使用ipt.get()来获得正确的结果。 OnPostExecute不保证完整的结果。