有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java可能与proguard有关吗?查询数据存储时出现神秘的“NullPonterException”,其中包含“缺少”类

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

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

当我尝试构建查询时,会出现以下错误: “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

你知道怎么解决这个问题吗?我正在使用安卓 studio和最新的应用程序引擎API

此外,我还有一个核心应用程序中断错误,出现在上述错误之后,引用的行是在我初始化“Query”对象时出现的:

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 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
            at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2641)
            at 安卓.app.ActivityThread.access$800(ActivityThread.java:156)
            at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1355)
            at 安卓.os.Handler.dispatchMessage(Handler.java:102)
            at 安卓.os.Looper.loop(Looper.java:157)
            at 安卓.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.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
            at com.安卓.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 安卓.app.Activity.performCreate(Activity.java:5312)
            at 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111)
            at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2541)
            at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2641)
            at 安卓.app.ActivityThread.access$800(ActivityThread.java:156)
            at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1355)
            at 安卓.os.Handler.dispatchMessage(Handler.java:102)
            at 安卓.os.Looper.loop(Looper.java:157)
            at 安卓.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.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
            at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:674)
            at dalvik.system.NativeStart.main(Native Method)

我还试图找到安卓 studio的“订购和导出”功能,我相信它现在基本上位于项目结构部分。我不知道里面有什么会影响这个错误


共 (2) 个答案

  1. # 1 楼答案

    我曾经有过这样一个应用程序。下面是我的端点类中用于查询数据存储的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;
    
  2. # 2 楼答案

    根据this discussion

    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.

    你能试试看它是否有效吗