以下是事件的项目符号列表:
- 我的 android 应用程序将 blob 发送到 Blobstore。
- 从应用程序引擎控制台,我可以看到我的 blob,
Blob Viewer
所以我知道我的 blob 已保存 - 但是 Blobstore 不会调用回调 url,而是
- Blobstore 向我的 Android 应用返回 500
所以我无法获取数据存储区的 blob 密钥。
做http post的代码myImage
是一个字节数组:
HttpClient httpClient = new DefaultHttpClient();
HttpPost postRequest = new HttpPost(url);
MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
try {
reqEntity.addPart("title", new StringBody(title));
reqEntity.addPart("caption", new StringBody(caption));
ByteArrayBody myBlob = new ByteArrayBody(myImage, "myImage.png");
reqEntity.addPart("myBlob", myBlob);
ByteArrayBody secBlob = new ByteArrayBody(secBlobImage, "secBlobImage.png");
reqEntity.addPart("secBlob", secBlob);
} catch (Exception e) {
e.printStackTrace();
}
postRequest.setEntity(reqEntity);
try {
HttpResponse response = httpClient.execute(postRequest);
System.out.println("RESPONSE CODE::: " + response.getStatusLine().getStatusCode());
System.out.println("REASON CODE::: " + response.getStatusLine().getReasonPhrase());
} catch (Exception e) {
e.printStackTrace();
}
在 android 发起对 blobstore 的调用后,我从 logCat 中得到以下咆哮:
04-30 00:59:15.922: I/APACHE HTTP (thCr=4674) - NafHttpAuthStrategyDefault(8796): (thUse=4674) NafHttpAuthStrategyDefault()
04-30 00:59:15.922: I/APACHE HTTP (thCr=4674) - KeeperManager(8796): (thUse=4674) INITIALIZATION of shared resources
04-30 00:59:15.922: I/APACHE HTTP (thCr=4674) - AndroidContextProviderImpl(8796): (thUse=4674) currentActivityThread=null
04-30 00:59:15.930: I/APACHE HTTP (thCr=4674) - GbaSupportIndicatorRequestUpdaterDefault(8796): (thUse=4674) GbaSupportIndicatorRequestUpdaterAbstract() userHeaderPredefined=Apache-HttpClient/UNAVAILABLE (java 1.4)
04-30 00:59:15.946: I/APACHE HTTP (thCr=4674) - NafHttpAuthStrategyDefault(8796): (thUse=4674) cached value : gbaSupportIsPossible=null
04-30 00:59:15.946: I/APACHE HTTP (thCr=4674) - NafHttpAuthStrategyDefault(8796): (thUse=4674) The current context is NOT a context of GBA service.
04-30 00:59:15.946: I/APACHE HTTP (thCr=4674) - GbaSupportPermissionRequestCheckerImpl(8796): (thUse=4674) isCurrentProcessRequestedGba()#finished result=false
04-30 00:59:15.946: I/APACHE HTTP (thCr=4674) - GbaSupportPermissionRequestCheckerImpl(8796): (thUse=4674) isCurrentProcessAllowedToUseGba()#started result=false
04-30 00:59:15.946: I/APACHE HTTP (thCr=4674) - NafHttpAuthStrategyDefault(8796): (thUse=4674) The GBA permission wasn't requested for this process.
04-30 00:59:15.954: I/APACHE HTTP (thCr=4674) - NafHttpAuthStrategyDefault(8796): (thUse=4674) It is impossible to support GBA now (many possible reasons: no Android Context, current client is GBA service, etc.), then it will be just usual HTTP.
04-30 00:59:15.954: I/APACHE HTTP (thCr=4674) - NafRequestExecutorWrapperRedirectionHandler(8796): (thUse=4674) It isn't GBA flow, redirection responses are not handled.
04-30 00:59:20.688: I/APACHE HTTP (thCr=4674) - NafHttpAuthStrategyDefault(8796): (thUse=4674) cached value : gbaSupportIsPossible=false
04-30 00:59:20.688: I/System.out(8796): RESPONSE CODE::: 500
04-30 00:59:20.696: I/System.out(8796): REASON CODE::: Internal Server Error
编辑:
非常感谢@Teshte 和@ShivanRaptor 的提问。我以为我的服务器没有被击中。但他们的问题让我意识到确实如此。所以当我查看服务器日志的时候,发现下面的代码中有一个java.lang.NullPointerException
at BlobKey titleKey = blobs.get("title").get(0)
。NPE 发生在 android 发送的元素上StringBody
。我还没有想出如何修复 NPE。
代码:
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
Map<String, List<BlobKey>> blobs = blobstoreService.getUploads(req);
BlobKey titleKey = blobs.get("title").get(0);
…
res.sendRedirect("/");
}