创建ParseObject时出现java android i/o故障异常
我在AWS上启动了一个Parse server实例,希望在其中存储来自android应用程序的数据 在模块的gradle中,我在dependencies下插入了下面的创建ParseObject时出现java android i/o故障异常,java,android,amazon-web-services,parse-server,Java,Android,Amazon Web Services,Parse Server,我在AWS上启动了一个Parse server实例,希望在其中存储来自android应用程序的数据 在模块的gradle中,我在dependencies下插入了下面的 implementation 'com.parse.bolts:bolts-tasks:1.4.0' implementation 'com.parse:parse-android:1.17.3' 并创建了一个初始化解析配置的新应用程序 import android.app.Application; import androi
implementation 'com.parse.bolts:bolts-tasks:1.4.0'
implementation 'com.parse:parse-android:1.17.3'
并创建了一个初始化解析配置的新应用程序
import android.app.Application;
import android.app.Application;
import android.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
我的android清单如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.parsetest2">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
android:name=".StarterApp"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
错误来自哪里?如何解决此问题?主要问题是您没有连接到服务器 [1] -确保已在
AndroidManifest
**在此处更改应用程序Id,在此处更改客户端密钥,如“ISIGDGU4YGCE673”
从服务器的仪表板设置->键中获取这些键。主要问题是您没有连接到服务器 [1] -确保已在
AndroidManifest
**在此处更改应用程序Id,在此处更改客户端密钥,如“ISIGDGU4YGCE673”
从服务器的仪表板设置中获取这些密钥->密钥已修复。出于某种原因,来自AWS服务的Parse server仪表板。例如,没有应用程序类别,您会注意到它只显示我的Bitnami解析API,没有应用程序选项。这意味着,首先,您无法将数据传递到服务器上本应可用的任何应用程序。其次,将服务器连接到您的android应用程序将不起作用,因为现在主密钥实际上与最近的客户端密钥不同 取而代之的是AWS使用Back4App,其工作方式与AWS完全相同。Back4App是基于Parse Server平台的可扩展后端服务 优点: 您不需要使用SSH客户端连接到服务器并检索应用程序ID、客户端密钥或服务器url。一切都在仪表板上的服务器设置下 转至Back4App: 步骤1:在back4app上创建帐户 步骤2:创建一个应用程序,您可以根据本教程将其命名为instagramandroid 第三步:按照链接中的所有剩余信息进行操作,每件事都会很顺利
注意:添加解析依赖项时,最新的是1.17.3。除非你想使用1.20.0,否则这会很好用,我试过了,但没有真正起作用。添加它就像您通常在gradle文件中添加依赖项一样:“implementation com.parse:parse android:1.17.3”已修复。出于某种原因,来自AWS服务的Parse server仪表板。例如,没有应用程序类别,您会注意到它只显示我的Bitnami解析API,没有应用程序选项。这意味着,首先,您无法将数据传递到服务器上本应可用的任何应用程序。其次,将服务器连接到您的android应用程序将不起作用,因为现在主密钥实际上与最近的客户端密钥不同 取而代之的是AWS使用Back4App,其工作方式与AWS完全相同。Back4App是基于Parse Server平台的可扩展后端服务 优点: 您不需要使用SSH客户端连接到服务器并检索应用程序ID、客户端密钥或服务器url。一切都在仪表板上的服务器设置下 转至Back4App: 步骤1:在back4app上创建帐户 步骤2:创建一个应用程序,您可以根据本教程将其命名为instagramandroid 第三步:按照链接中的所有剩余信息进行操作,每件事都会很顺利
注意:添加解析依赖项时,最新的是1.17.3。除非你想使用1.20.0,否则这会很好用,我试过了,但没有真正起作用。添加它,就像您通常在gradle文件中添加依赖项一样:“implementation com.parse:parse android:1.17.3”如果托管的解析服务器位于HTTP服务器而不是HTTPS上,则也会出现此问题。因为Android 9.0及以上版本不允许您通过HTTP使用明文信息。因此,如果是这样,您可以执行以下操作:
- 在清单文件和清单标记中添加
行。所以看起来像android:targetSandboxVersion=“1”
- 在清单文件中,在应用程序标记中添加
行。所以看起来像android:usesCleartextTraffic=“true”
如果托管的解析服务器位于HTTP服务器而不是HTTPS上,也会出现此问题。因为Android 9.0及以上版本不允许您通过HTTP使用明文信息。因此,如果是这样,您可以执行以下操作:
- 在清单文件和清单标记中添加
行。所以看起来像android:targetSandboxVersion=“1”
- 在清单文件中,在应用程序标记中添加
行。所以看起来像android:usesCleartextTraffic=“true”
要使用最后一个,您必须将“implementation com.parse:parse android:1.17.3”更改为“implementation”com.github.parse community.parse SDK android:1.20.0”。注意:您可能需要做一些更改(例如,如果使用推送通知),我建议您在这里测试并检查发布版本:Yes@RamosCharles,除了您的回答之外,我还想推荐说明如何将项目迁移到AndroidX的文档,请检查:要使用最后一个,您必须将“implementation com.parse:parse android:1.17.3”更改为“implementation”“com.github.parse community.parse SDK Android:1.20.0”。注意:您可能需要做一些更改(例如,如果您使用推送通知),我建议您测试它并检查以下版本:
<meta-data
android:name="com.parse.SERVER_URL"
android:value="https://parseapi.back4app.com" />
<meta-data
android:name="com.parse.APPLICATION_ID"
android:value="_App_Id_Here_" /> //<- put your key
<meta-data
android:name="com.parse.CLIENT_KEY"
android:value="_client_Key_here_" /> //<- put your key
Parse.initialize(new Parse.Configuration.Builder(getApplicationContext())
.applicationId(myAppId)//"myAppId" should be sth like ->"ASHWD63787EDXSG8"
.clientKey(myClientKey)//should be sth like ->"tdf29yedih287823"
.server(serverAddress)//something like-> "https://parseapi.back4app.com"
.build()
);