我开发了一个简单的应用程序来将数据保存到google应用引擎的数据存储中,然后调用数据存储并列出所有实体。
虽然我能够将数据存储在数据存储中,但我无法“查询”数据存储。
当我试图构建我的查询时,我会得到一个错误:"java.lang.NullPointerException:没有为这个线程注册任何API环境。“
这发生在这一行上,不管我把它放在哪里:
Query query = new Query("myStoredBean");注意:在调用上面的代码行之前,我确实验证了数据存储连接是打开的和有效的。
此外,除了nullpointerexception之外,我的logcat还报告了一些奇怪的问题,我不知道如何解决这些问题:
10-01 18:11:38.884 32537-32537/com.myApp.MyModule W/dalvikvm﹕ Link of class 'Lcom/google/appengine/repackaged/com/google/io/protocol/ProtocolMessage;' failed
10-01 18:11:38.884 32537-32537/com.myApp.MyModule W/dalvikvm﹕ Unable to resolve superclass of Lcom/google/apphosting/api/DatastorePb$Transaction; (2168)
10-01 18:11:38.884 32537-32537/com.myApp.MyModule W/dalvikvm﹕ Link of class 'Lcom/google/apphosting/api/DatastorePb$Transaction;' failed
10-01 18:11:38.884 32537-32537/com.myApp.MyModule E/dalvikvm﹕ Could not find class 'com.google.apphosting.api.DatastorePb$Transaction', referenced from method com.google.appengine.api.datastore.BaseDatastoreServiceImpl.a
10-01 18:11:38.884 32537-32537/com.myApp.MyModule W/dalvikvm﹕ VFY: unable to resolve new-instance 2597 (Lcom/google/apphosting/api/DatastorePb$Transaction;) in Lcom/google/appengine/api/datastore/BaseDatastoreServiceImpl;
10-01 18:11:38.884 32537-32537/com.myApp.MyModule W/dalvikvm﹕ Link of class 'Lcom/google/appengine/repackaged/com/google/io/protocol/ProtocolMessage;' failed
10-01 18:11:38.884 32537-32537/com.myApp.MyModule W/dalvikvm﹕ Unable to resolve superclass of Lcom/google/apphosting/api/DatastorePb$Transaction; (2168)
10-01 18:11:38.884 32537-32537/com.myApp.MyModule W/dalvikvm﹕ Link of class 'Lcom/google/apphosting/api/DatastorePb$Transaction;' failed
10-01 18:11:38.884 32537-32537/com.myApp.MyModule W/dalvikvm﹕ Link of class 'Lcom/google/appengine/repackaged/com/google/io/protocol/ProtocolMessage;' failed
10-01 18:11:38.884 32537-32537/com.myApp.MyModule W/dalvikvm﹕ Unable to resolve superclass of Lcom/google/apphosting/api/DatastorePb$PutRequest; (2168)
10-01 18:11:38.884 32537-32537/com.myApp.MyModule W/dalvikvm﹕ Link of class 'Lcom/google/apphosting/api/DatastorePb$PutRequest;' failed
10-01 18:11:38.884 32537-32537/com.myApp.MyModule E/dalvikvm﹕ Could not find class 'com.google.apphosting.api.DatastorePb$PutRequest', referenced from method com.google.appengine.api.datastore.AsyncDatastoreServiceImpl.a
10-01 18:11:38.884 32537-32537/com.myApp.MyModule W/dalvikvm﹕ VFY: unable to resolve new-instance 2568 (Lcom/google/apphosting/api/DatastorePb$PutRequest;) in Lcom/google/appengine/api/datastore/AsyncDatastoreServiceImpl;
10-01 18:11:38.884 32537-32537/com.myApp.MyModule W/dalvikvm﹕ Link of class 'Lcom/google/appengine/repackaged/com/google/io/protocol/ProtocolMessage;' failed
10-01 18:11:38.884 32537-32537/com.myApp.MyModule W/dalvikvm﹕ Unable to resolve superclass of Lcom/google/apphosting/api/DatastorePb$PutRequest; (2168)
10-01 18:11:38.884 32537-32537/com.myApp.MyModule W/dalvikvm﹕ Link of class 'Lcom/google/apphosting/api/DatastorePb$PutRequest;' failed
10-01 18:11:38.884 32537-32537/com.myApp.MyModule W/dalvikvm﹕ Link of class 'Lcom/google/appengine/repackaged/com/google/io/protocol/ProtocolMessage;' failed
10-01 18:11:38.884 32537-32537/com.myApp.MyModule W/dalvikvm﹕ VFY: unable to find class referenced in signature (Lcom/google/appengine/repackaged/com/google/io/protocol/ProtocolMessage;)
10-01 18:11:38.884 32537-32537/com.myApp.MyModule W/dalvikvm﹕ Link of class 'Lcom/google/appengine/repackaged/com/google/io/protocol/ProtocolMessage;' failed
10-01 18:11:38.884 32537-32537/com.myApp.MyModule W/dalvikvm﹕ Unable to resolve superclass of Lcom/google/apphosting/api/DatastorePb$DeleteRequest; (2168)
10-01 18:11:38.884 32537-32537/com.myApp.MyModule W/dalvikvm﹕ Link of class 'Lcom/google/apphosting/api/DatastorePb$DeleteRequest;' failed
10-01 18:11:38.884 32537-32537/com.myApp.MyModule E/dalvikvm﹕ Could not find class 'com.google.apphosting.api.DatastorePb$DeleteRequest', referenced from method com.google.appengine.api.datastore.AsyncDatastoreServiceImpl$1.a知道怎么解决这个问题吗?我正在使用android和最新的应用程序引擎api。
此外,我有一个核心应用程序中断错误出现在上面,所引用的行是当我初始化“查询”对象时:
10-03 10:25:17.844 16385-16385/com.myapp.myModule E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.myapp.myModule, PID: 16385
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.myModule/com.myapp.myModule.MainActivityWithSwipeableTabs}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2641)
at android.app.ActivityThread.access$800(ActivityThread.java:156)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5867)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.myapp.myModule.MainActivityWithSwipeableTabs.onCreate(SourceFile:66)
at android.app.Activity.performCreate(Activity.java:5312)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2541)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2641)
at android.app.ActivityThread.access$800(ActivityThread.java:156)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5867)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674)
at dalvik.system.NativeStart.main(Native Method)我还试图定位android的“订单和导出”功能,我认为它现在基本上位于项目结构部分。我不知道里面有什么会影响这个错误..。
发布于 2014-10-08 17:30:09
我有一个像这样的应用程序曾经工作过。下面是我的Endpoint类中用于查询数据存储的API方法。
@Api(name = "myendpoint", namespace = @ApiNamespace(ownerDomain = "domain.com", ownerName = "domain.com.com", packagePath = "myPackage"))
public class MyEndpoint {
/**
* This method lists all the entities inserted in datastore.
* It uses HTTP GET method and paging support.
*
* @return A CollectionResponse class containing the list of all entities
* persisted and a cursor to the next page.
*/
@SuppressWarnings({ "unchecked", "unused" })
@ApiMethod(name = "listStuff")
public CollectionResponse<Stuff> listStuff(
@Nullable @Named("cursor") String cursorString,
@Nullable @Named("limit") Integer limit) {
EntityManager mgr = null;
Cursor cursor = null;
List<Stuff> execute = null;
try {
mgr = getEntityManager();
Query query = mgr
.createQuery("select from Stuff as Stuff");
if (cursorString != null && cursorString != "") {
cursor = Cursor.fromWebSafeString(cursorString);
query.setHint(JPACursorHelper.CURSOR_HINT, cursor);
}
if (limit != null) {
query.setFirstResult(0);
query.setMaxResults(limit);
}
execute = (List<Stuff>) query.getResultList();
cursor = JPACursorHelper.getCursor(execute);
if (cursor != null)
cursorString = cursor.toWebSafeString();
// Tight loop for fetching all entities from datastore and accomodate
// for lazy fetch.
for (Stuff obj : execute)
;
} finally {
mgr.close();
}
return CollectionResponse.<Stuff> builder().setItems(execute)
.setNextPageToken(cursorString).build();
}我用这个代码从一个AsyncTask调用了这个方法。
Myendpoint.Builder endpointBuilder = new Myendpoint.Builder(
AndroidHttp.newCompatibleTransport(), new JacksonFactory(),
null);
endpointBuilder = CloudEndpointUtils.updateBuilder(endpointBuilder).setApplicationName(MainActivity.APPLICATION_NAME);
endpoint = endpointBuilder.build();
try {
result = endpoint.listStuff().execute();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
// SynchKey = 0;
// result = null;
}
return result;发布于 2014-10-05 01:16:55
据这一讨论称,
You MUST run the application as a Web Application to be able to activate the App Engine environment with the Datastore that you need for JDO.
你能试试看它是否有效吗?
https://stackoverflow.com/questions/26151667
复制相似问题