我已经在我的应用程序开发中达到了要在实际设备(而不是仿真器)上对其进行测试的地步。尽管该应用程序尚未完成,但可以在模拟器上运行时完美运行。
因此,我建立了一个APK以传输到我的设备并进行安装。但是,一切进展顺利,当我按下运行ParseQuery的按钮以构建阵列,将其附加到ListView并显示在AlertDialog中时,我收到的所有内容(在30-45秒后)都是作为错误处理程序,说明“ I / O失败”-这是从ParseException中检索到的消息。
不确定有关ParseServers的Internet许可要求(没有Internet许可的情况下在模拟器中工作正常,我尝试将Internet许可添加到清单中,然后再次尝试...这产生了相同的结果。
我已经尝试了调试和发布版本,以及经过签名和未经签名的APK都具有相同的结果。除了未签名的发行版本,我的手机无法安装。
我对此感到茫然,因为这是我第一次使用ParseServer测试应用程序,所以我问大家好,是否可以提供任何帮助。
让我知道您是否需要查看任何特定的代码段,然后我将它们发布,但是正如我所说的,它在模拟器中可以正常工作,因此我只能假设这与构建apk的方式都可能存在问题或在AWS上部署ParseServer实例时。
哦..,我选择不对该应用程序使用任何类型的用户身份验证,所以我不以任何方式访问用户类,并且启用了autouser。
代码要求@DaviMacêdo-我不确定您要请求初始化的哪一部分,因此我将添加我认为涉及为此应用程序设置Parse的所有区域-
。StarterApplication-
package com.app.letsplaydarts;
import android.app.Application;
import com.parse.Parse;
import com.parse.ParseACL;
import com.parse.ParseUser;
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("9da08bc83....62b73e6ea")
.clientKey("a04b8e7866a9....67fc3dbebfbd")
.server("http://ipaddress/parse/")
.build()
);
ParseUser.enableAutomaticUser();
ParseACL defaultACL = new ParseACL();
defaultACL.setPublicReadAccess(true);
defaultACL.setPublicWriteAccess(true);
ParseACL.setDefaultACL(defaultACL, true);
}
}
服务器地址不是AWS提供的公共DNS,它是参考创建实例后通过PuTTY访问的server.js文件提供提供的唯一公共DNS是用于访问ParseServer仪表板的公共DNS]
我正在使用AWS提供的t2.micro免费服务来托管Bitnami ParseServer
[相关项目摇篮部分-
allprojects {
repositories {
google()
jcenter()
maven { url "https://jitpack.io" }
mavenCentral()
}
}
相关模块底座部分-
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'com.parse.bolts:bolts-tasks:1.4.0'
implementation 'com.parse:parse-android:1.17.3'
}
运行PuTTY控制台结果curl http://ip/parse/ -v
bitnami@ip-:~$ curl http://ip/parse/ -v
* Trying ip...
* TCP_NODELAY set
* Connected to ip (ip) port 80 (#0)
> GET /parse/ HTTP/1.1
> Host: ip
> User-Agent: curl/7.53.1
> Accept: */*
>
< HTTP/1.1 403 Forbidden
< Date: Tue, 12 Nov 2019 13:24:03 GMT
< Server: Apache
< X-Frame-Options: SAMEORIGIN
< X-Powered-By: Express
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Methods: GET,PUT,POST,DELETE,OPTIONS
< Access-Control-Allow-Headers: X-Parse-Master-Key, X-Parse-REST-API-Key, X-Parse-Javascript-Key, X-Parse-Application-Id, X-Parse-Client-Version, X-Parse-Session-Token, X-Requested-With, X-Parse-Revocable-Session, Content-Type, Pragma, Cache-Control
< Access-Control-Expose-Headers: X-Parse-Job-Status-Id, X-Parse-Push-Status-Id
< Content-Length: 24
< Cache-Control: s-maxage=10
<
* Connection #0 to host ip left intact
{"error":"unauthorized"}bitnami@ip:~$
我设法从ParseException中检索了一些额外的信息,如下所示-
.getMessage() returns "I/o failure"
.getCode() returns "100" - Listed as a 'client-only' error
// ConnectionFailed 100 The connection to the Parse servers failed.
.getCause() returns "java.net.UnknownServiceException: CLEARTEXT communication to [ipaddress] not permitted by network security policy"
对我来说,这可能是我的手机网络提供商遇到的问题!?有人可以确认吗?
在这种情况下,.getCause()
功能已被证明是无价的。快速搜索给出的响应使我想到this page-这里的解决方案2对我有用,下面是快速概述-