首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这会与Pro卫兵有关吗?--在查询数据存储时神秘的"NullPonterException“,还有”缺失“类。

这会与Pro卫兵有关吗?--在查询数据存储时神秘的"NullPonterException“,还有”缺失“类。
EN

Stack Overflow用户
提问于 2014-10-01 22:22:22
回答 2查看 296关注 0票数 2

我开发了一个简单的应用程序来将数据保存到google应用引擎的数据存储中,然后调用数据存储并列出所有实体。

虽然我能够将数据存储在数据存储中,但我无法“查询”数据存储。

当我试图构建我的查询时,我会得到一个错误:"java.lang.NullPointerException:没有为这个线程注册任何API环境。“

这发生在这一行上,不管我把它放在哪里:

代码语言:javascript
复制
Query query = new Query("myStoredBean");

注意:在调用上面的代码行之前,我确实验证了数据存储连接是打开的和有效的。

此外,除了nullpointerexception之外,我的logcat还报告了一些奇怪的问题,我不知道如何解决这些问题:

代码语言:javascript
复制
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。

此外,我有一个核心应用程序中断错误出现在上面,所引用的行是当我初始化“查询”对象时:

代码语言:javascript
复制
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的“订单和导出”功能,我认为它现在基本上位于项目结构部分。我不知道里面有什么会影响这个错误..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-08 17:30:09

我有一个像这样的应用程序曾经工作过。下面是我的Endpoint类中用于查询数据存储的API方法。

代码语言:javascript
复制
     @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调用了这个方法。

代码语言:javascript
复制
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;
票数 0
EN

Stack Overflow用户

发布于 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.

你能试试看它是否有效吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26151667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档