创建ParseObject时出现java 安卓 i/o故障异常
我在AWS上启动了一个Parse server实例,希望在其中存储来自安卓应用程序的数据
在模块的gradle中,我在dependencies下插入了下面的
implementation 'com.parse.bolts:bolts-tasks:1.4.0'
implementation 'com.parse:parse-安卓:1.17.3'
并创建了一个初始化解析配置的新应用程序
import 安卓.app.Application;
import 安卓.app.Application;
import 安卓.util.Log;
import com.parse.Parse;
import com.parse.ParseACL;
import com.parse.ParseException;
import com.parse.ParseObject;
import com.parse.ParseUser;
import com.parse.SaveCallback;
public class StarterApp 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(myAppId)
.clientKey(myClientKey)
.server(serverAddress)
.build()
);
ParseObject object = new ParseObject("ExampleObject");
// object.put("id", "123");
// object.put("name", "jack");
object.saveInBackground(new SaveCallback () {
@Override
public void done(ParseException ex) {
if (ex == null) {
Log.i("Parse Result", "Successful!");
} else {
Log.i("Parse Result", "Failed" + ex.toString());
}
}
});
ParseUser.enableAutomaticUser();
ParseACL defaultACL = new ParseACL();
defaultACL.setPublicReadAccess(true);
defaultACL.setPublicWriteAccess(true);
ParseACL.setDefaultACL(defaultACL, true);
}
}
这对我来说是全新的,我正在学习一门3年的Android开发课程。当我运行此操作时,异常会不断被捕获,并出现相同的错误:
com.parse.ParseRequest$ParseRequestException: i/o failure
我的安卓清单如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
package="com.example.parsetest2">
<uses-permission 安卓:name="安卓.permission.INTERNET" />
<uses-permission 安卓:name="安卓.permission.ACCESS_NETWORK_STATE" />
<uses-permission 安卓:name="安卓.permission.READ_EXTERNAL_STORAGE" />
<uses-permission 安卓:name="安卓.permission.ACCESS_FINE_LOCATION" />
<application
安卓:name=".StarterApp"
安卓:allowBackup="true"
安卓:icon="@mipmap/ic_launcher"
安卓:label="@string/app_name"
安卓:roundIcon="@mipmap/ic_launcher_round"
安卓:supportsRtl="true"
安卓:theme="@style/AppTheme">
<activity 安卓:name=".MainActivity">
<intent-filter>
<action 安卓:name="安卓.intent.action.MAIN" />
<category 安卓:name="安卓.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
错误来自哪里?怎么解决呢?
# 1 楼答案
固定的。出于某种原因,来自AWS服务的Parse server仪表板。例如,http://ec2-18-220-53-0.us-east-2.compute.amazonaws.com没有应用程序类别,您会注意到它只显示我的Bitnami解析API,没有应用程序选项。这意味着,首先,您无法将数据传递到服务器上本应可用的任何应用程序。其次,将服务器连接到您的android应用程序将不起作用,因为现在主密钥实际上与最近的客户端密钥不同
取而代之的是AWS使用Back4App,其工作方式与AWS完全相同。Back4App是基于Parse Server平台的可扩展后端服务
优点:
您不需要使用SSH客户端连接到服务器并检索应用程序ID、客户端密钥或服务器url。一切都在仪表板上的服务器设置下
转至Back4App:
步骤1:在back4app上创建帐户
步骤2:创建一个应用程序,您可以根据本教程将其命名为instagramandroid
第三步:按照链接中的所有剩余信息进行操作,每件事都会很顺利https://www.back4app.com/docs/pages/android/how-to-build-an-android-app-on-back4app
注意:添加解析依赖项时,最新的是1.17.3。除非你想使用1.20.0,否则这会很好用,我试过了,但没有真正起作用。添加它,就像您通常在gradle文件中添加依赖项一样:“实现com”。解析:解析android:1.17.3'
# 2 楼答案
主要问题是您没有连接到服务器
[1]-确保已将应用程序id和客户端id添加到
AndroidManifest
**在此处更改应用程序Id,在此处更改客户端密钥,如“ISIGDGU4YGCE673”
[2]-将存储库
{ maven { url 'https://jitpack.io' } }
添加到build.gradle(Project:xyz)
[3]-确保您更改了。解析服务器、AppId和clientKey的服务器字段:
从服务器的仪表板设置中获取这些密钥->;钥匙
# 3 楼答案
如果托管解析服务器位于HTTP服务器而不是HTTPS上,也可能发生此问题。因为Android 9.0及以上版本不允许您通过HTTP使用明文信息。因此,如果是这样,您可以执行以下操作:
android:targetSandboxVersion="1"
行。所以看起来像android:usesCleartextTraffic="true"
行。所以看起来像