Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建ParseObject时出现java android i/o故障异常_Java_Android_Amazon Web Services_Parse Server - Fatal编程技术网

创建ParseObject时出现java android i/o故障异常

创建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

我在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 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()
        );