将 Parse 服务器添加到现有项目
Add Parse server to an already existing project
我有一个项目,我想向其中添加 Parse。我在我的电脑上安装了 Parse 服务器,从他们的网站下载了 SDK,它运行得非常好。
但是,我不想使用他们网站上的 SDK,我只想将库添加到我的项目中。
这是我所做的:我将这些库文件复制到我的项目 libs 文件夹中
'libs/parse-android-1.13.1.jar'
'libs/bolts-android-1.2.0.jar'
这是我的代码:
在 build.gradle 文件中:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.1'
testCompile 'junit:junit:4.12'
compile files('libs/parse-android-1.13.1.jar')
compile files('libs/bolts-android-1.2.0.jar')
}
我添加了上面的依赖。
主要Activity:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Parse.initialize(new Parse.Configuration.Builder(getApplicationContext())
.applicationId("kooora.com100plus")
.clientKey("kooora.com100plusMasterKey")
.server("http://10.0.2.2:1337/parse/")
.build()
);
ParseObject gameScore = new ParseObject("GameScore");
gameScore.put("score", 1337);
gameScore.put("playerName", "Sean Plott");
gameScore.put("cheatMode", false);
gameScore.saveInBackground(new SaveCallback() {
public void done(ParseException e) {
if (e == null) {
Log.i("Parse", "Save Succeeded");
} else {
Log.i("Parse", e.getMessage());
}
}
});
}
}
这是我收到的错误的日志:
10-16 06:34:42.539 25428-25428/? I/art: Not late-enabling -Xcheck:jni (already on)
10-16 06:34:42.563 25428-25436/? E/art: Failed writing handshake bytes (-1 of 14): Broken pipe
10-16 06:34:42.563 25428-25436/? I/art: Debugger is no longer active
10-16 06:34:42.696 25428-25428/? D/AndroidRuntime: Shutting down VM
10-16 06:34:42.696 25428-25428/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.sabirmoglad.big_boss, PID: 25428
java.lang.NoClassDefFoundError: Failed resolution of: Lbolts/TaskCompletionSource;
at com.parse.ParseTaskUtils.callbackOnMainThreadAsync(ParseTaskUtils.java:100)
at com.parse.ParseTaskUtils.callbackOnMainThreadAsync(ParseTaskUtils.java:72)
at com.parse.ParseTaskUtils.callbackOnMainThreadAsync(ParseTaskUtils.java:59)
at com.parse.ParseObject.saveInBackground(ParseObject.java:1529)
at com.example.sabirmoglad.big_boss.MainActivity.onCreate(MainActivity.java:31)
at android.app.Activity.performCreate(Activity.java:5937)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access0(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.ClassNotFoundException: Didn't find class "bolts.TaskCompletionSource" on path: DexPathList[[zip file "/data/app/com.example.sabirmoglad.big_boss-2/base.apk"],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at com.parse.ParseTaskUtils.callbackOnMainThreadAsync(ParseTaskUtils.java:100)
at com.parse.ParseTaskUtils.callbackOnMainThreadAsync(ParseTaskUtils.java:72)
at com.parse.ParseTaskUtils.callbackOnMainThreadAsync(ParseTaskUtils.java:59)
at com.parse.ParseObject.saveInBackground(ParseObject.java:1529)
at com.example.sabirmoglad.big_boss.MainActivity.onCreate(MainActivity.java:31)
at android.app.Activity.performCreate(Activity.java:5937)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access0(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Suppressed: java.lang.ClassNotFoundException: bolts.TaskCompletionSource
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 19 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
我不知道出了什么问题!我刚遇到运行时错误,它停止工作
更新:
按照评论中的建议,我将初始化放在我的应用程序中 class,
事实上,我从原始 SDK 中复制了 class,但似乎没有执行此初始化,
这里是class我从原来的SDK中添加的:
public class StarterApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// Enable Local Datastore.
Parse.enableLocalDatastore(this);
// Add your initialization code here
Parse.initialize(new Parse.Configuration.Builder(getApplicationContext())
.applicationId("kooora.com100plus")
.clientKey("kooora.com100plusMasterKey")
.server("http://10.0.2.2:1337/parse/")
.build()
);
ParseUser.enableAutomaticUser();
ParseACL defaultACL = new ParseACL();
// Optionally enable public read access.
// defaultACL.setPublicReadAccess(true);
ParseACL.setDefaultACL(defaultACL, true);
}
}
首先,没有必要将这两行 libs 添加到 Gradle 文件中。这一行本身包括所有 JAR 文件。
compile fileTree(dir: 'libs', include: ['*.jar'])
现在,当您可以在 JCenter 或 Maven Central 中找到依赖项时,我通常建议您尽量避免使用 JAR 库(如果您不确定,请查找这些依赖项)。原因是 - 为您包含传递依赖项,版本管理需要一些数字更改,而不是覆盖文件等。
然后,Class 未找到错误可能源于使用过时版本的库。
总而言之,删除JAR 文件,使用这些依赖项编译库。 (以上评论中的最新版本)
dependencies {
// other stuff
compile 'com.parse:parse-android:1.13.1'
compile 'com.parse.bolts:bolts-tasks:1.4.0'
compile 'com.parse.bolts:bolts-applinks:1.4.0'
}
我有一个项目,我想向其中添加 Parse。我在我的电脑上安装了 Parse 服务器,从他们的网站下载了 SDK,它运行得非常好。
但是,我不想使用他们网站上的 SDK,我只想将库添加到我的项目中。
这是我所做的:我将这些库文件复制到我的项目 libs 文件夹中
'libs/parse-android-1.13.1.jar'
'libs/bolts-android-1.2.0.jar'
这是我的代码:
在 build.gradle 文件中:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.1'
testCompile 'junit:junit:4.12'
compile files('libs/parse-android-1.13.1.jar')
compile files('libs/bolts-android-1.2.0.jar')
}
我添加了上面的依赖。
主要Activity:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Parse.initialize(new Parse.Configuration.Builder(getApplicationContext())
.applicationId("kooora.com100plus")
.clientKey("kooora.com100plusMasterKey")
.server("http://10.0.2.2:1337/parse/")
.build()
);
ParseObject gameScore = new ParseObject("GameScore");
gameScore.put("score", 1337);
gameScore.put("playerName", "Sean Plott");
gameScore.put("cheatMode", false);
gameScore.saveInBackground(new SaveCallback() {
public void done(ParseException e) {
if (e == null) {
Log.i("Parse", "Save Succeeded");
} else {
Log.i("Parse", e.getMessage());
}
}
});
}
}
这是我收到的错误的日志:
10-16 06:34:42.539 25428-25428/? I/art: Not late-enabling -Xcheck:jni (already on)
10-16 06:34:42.563 25428-25436/? E/art: Failed writing handshake bytes (-1 of 14): Broken pipe
10-16 06:34:42.563 25428-25436/? I/art: Debugger is no longer active
10-16 06:34:42.696 25428-25428/? D/AndroidRuntime: Shutting down VM
10-16 06:34:42.696 25428-25428/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.sabirmoglad.big_boss, PID: 25428
java.lang.NoClassDefFoundError: Failed resolution of: Lbolts/TaskCompletionSource;
at com.parse.ParseTaskUtils.callbackOnMainThreadAsync(ParseTaskUtils.java:100)
at com.parse.ParseTaskUtils.callbackOnMainThreadAsync(ParseTaskUtils.java:72)
at com.parse.ParseTaskUtils.callbackOnMainThreadAsync(ParseTaskUtils.java:59)
at com.parse.ParseObject.saveInBackground(ParseObject.java:1529)
at com.example.sabirmoglad.big_boss.MainActivity.onCreate(MainActivity.java:31)
at android.app.Activity.performCreate(Activity.java:5937)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access0(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.ClassNotFoundException: Didn't find class "bolts.TaskCompletionSource" on path: DexPathList[[zip file "/data/app/com.example.sabirmoglad.big_boss-2/base.apk"],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at com.parse.ParseTaskUtils.callbackOnMainThreadAsync(ParseTaskUtils.java:100)
at com.parse.ParseTaskUtils.callbackOnMainThreadAsync(ParseTaskUtils.java:72)
at com.parse.ParseTaskUtils.callbackOnMainThreadAsync(ParseTaskUtils.java:59)
at com.parse.ParseObject.saveInBackground(ParseObject.java:1529)
at com.example.sabirmoglad.big_boss.MainActivity.onCreate(MainActivity.java:31)
at android.app.Activity.performCreate(Activity.java:5937)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access0(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Suppressed: java.lang.ClassNotFoundException: bolts.TaskCompletionSource
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 19 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
我不知道出了什么问题!我刚遇到运行时错误,它停止工作
更新:
按照评论中的建议,我将初始化放在我的应用程序中 class,
事实上,我从原始 SDK 中复制了 class,但似乎没有执行此初始化,
这里是class我从原来的SDK中添加的:
public class StarterApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// Enable Local Datastore.
Parse.enableLocalDatastore(this);
// Add your initialization code here
Parse.initialize(new Parse.Configuration.Builder(getApplicationContext())
.applicationId("kooora.com100plus")
.clientKey("kooora.com100plusMasterKey")
.server("http://10.0.2.2:1337/parse/")
.build()
);
ParseUser.enableAutomaticUser();
ParseACL defaultACL = new ParseACL();
// Optionally enable public read access.
// defaultACL.setPublicReadAccess(true);
ParseACL.setDefaultACL(defaultACL, true);
}
}
首先,没有必要将这两行 libs 添加到 Gradle 文件中。这一行本身包括所有 JAR 文件。
compile fileTree(dir: 'libs', include: ['*.jar'])
现在,当您可以在 JCenter 或 Maven Central 中找到依赖项时,我通常建议您尽量避免使用 JAR 库(如果您不确定,请查找这些依赖项)。原因是 - 为您包含传递依赖项,版本管理需要一些数字更改,而不是覆盖文件等。
然后,Class 未找到错误可能源于使用过时版本的库。
总而言之,删除JAR 文件,使用这些依赖项编译库。 (以上评论中的最新版本)
dependencies {
// other stuff
compile 'com.parse:parse-android:1.13.1'
compile 'com.parse.bolts:bolts-tasks:1.4.0'
compile 'com.parse.bolts:bolts-applinks:1.4.0'
}