【问题标题】:com.parse.ParseRequest$ParseRequestException: unauthorizedcom.parse.ParseRequest$ParseRequestException:未经授权
【发布时间】:2016-08-02 12:48:04
【问题描述】:

我是安卓新手。好吧,我正在尝试将数据发送到解析云,但我遇到了这个异常。

com.parse.ParseRequest$ParseRequestException: unauthorized

这是 MainActivity 类。

/*
 * Copyright (c) 2015-present, Parse, LLC.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree. An additional grant
 * of patent rights can be found in the PATENTS file in the same directory.
 */
package com.parse.starter;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;

import com.parse.ParseAnalytics;
import com.parse.ParseException;
import com.parse.ParseObject;
import com.parse.SaveCallback;


public class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

      ParseObject score = new ParseObject("Score");
      score.put("username","azeem");
      score.put("score","199");
      score.saveInBackground(new SaveCallback() {
          @Override
          public void done(ParseException e) {
              if (e == null)
              {
                  Log.i("SaveInBackground","Succesfully");
              }
              else {
                  Log.i("SaveInBackground","Failed");
                  e.printStackTrace();
              }
          }
      });

      ParseAnalytics.trackAppOpenedInBackground(getIntent());

  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
      return true;
    }

    return super.onOptionsItemSelected(item);
  }
}

这里是 logcat。

08-02 16:03:14.278 2542-2542/com.parse.starter I/art: Not late-enabling -Xcheck:jni (already on)
08-02 16:03:14.356 2542-2542/com.parse.starter W/System: ClassLoader referenced unknown path: /data/app/com.parse.starter-2/lib/x86
08-02 16:03:20.832 2542-2542/com.parse.starter W/System: ClassLoader referenced unknown path: /data/app/com.parse.starter-2/lib/x86
08-02 16:03:21.431 2542-2548/com.parse.starter W/art: Suspending all threads took: 80.123ms
08-02 16:03:22.473 2542-2548/com.parse.starter W/art: Suspending all threads took: 120.266ms
08-02 16:03:22.642 2542-2552/com.parse.starter I/art: Background sticky concurrent mark sweep GC freed 16012(1690KB) AllocSpace objects, 8(164KB) LOS objects, 69% free, 1121KB/3MB, paused 823us total 115.234ms
08-02 16:03:25.669 2542-2548/com.parse.starter W/art: Suspending all threads took: 2.314s
08-02 16:03:26.291 2542-2548/com.parse.starter W/art: Suspending all threads took: 431.859ms
08-02 16:03:26.369 2542-2548/com.parse.starter W/art: Suspending all threads took: 9.786ms
08-02 16:03:26.814 2542-2992/com.parse.starter D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true

                                                                 [ 08-02 16:03:26.823  2542: 2542 D/         ]
                                                                 HostConnection::get() New Host Connection established 0xaa1a8560, tid 2542
08-02 16:03:26.875 2542-2548/com.parse.starter W/art: Suspending all threads took: 14.603ms
08-02 16:03:26.899 2542-2992/com.parse.starter I/OpenGLRenderer: Initialized EGL, version 1.4
08-02 16:03:27.395 2542-2548/com.parse.starter W/art: Suspending all threads took: 34.582ms
08-02 16:03:28.902 2542-2548/com.parse.starter W/art: Suspending all threads took: 536.386ms
08-02 16:19:43.659 2542-2548/com.parse.starter W/art: Suspending all threads took: 7.097ms
08-02 16:19:48.994 2542-2883/com.parse.starter W/System: ClassLoader referenced unknown path: /data/data/com.parse.starter/lib
08-02 16:19:49.119 2542-2992/com.parse.starter E/Surface: getSlotFromBufferLocked: unknown buffer: 0xa9a52620
08-02 16:19:49.313 2542-2992/com.parse.starter V/RenderScript: 0xa0f87000 Launching thread(s), CPUs 2
08-02 16:19:51.063 2542-2992/com.parse.starter E/Surface: getSlotFromBufferLocked: unknown buffer: 0xa9a52690
08-02 16:19:54.880 2542-2542/com.parse.starter W/art: Before Android 4.1, method int android.support.v7.internal.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
08-02 16:19:56.241 2542-2992/com.parse.starter E/Surface: getSlotFromBufferLocked: unknown buffer: 0xa9a52690
08-02 16:20:43.221 2542-2883/com.parse.starter W/System: ClassLoader referenced unknown path: /data/data/com.parse.starter/lib
08-02 16:20:43.259 2542-2992/com.parse.starter E/Surface: getSlotFromBufferLocked: unknown buffer: 0xa9a52620
08-02 16:20:45.238 2542-2992/com.parse.starter E/Surface: getSlotFromBufferLocked: unknown buffer: 0xa9a52620
08-02 16:25:09.700 2542-2992/com.parse.starter E/Surface: getSlotFromBufferLocked: unknown buffer: 0xa9a52ee0
08-02 16:57:48.310 2542-2992/com.parse.starter E/Surface: getSlotFromBufferLocked: unknown buffer: 0xa9a525b0
08-02 16:58:45.961 18271-18271/com.parse.starter W/System: ClassLoader referenced unknown path: /data/app/com.parse.starter-1/lib/x86
08-02 16:58:53.160 18271-18271/com.parse.starter W/System: ClassLoader referenced unknown path: /data/app/com.parse.starter-1/lib/x86
08-02 16:58:53.427 18271-18531/com.parse.starter D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true

                                                                   [ 08-02 16:58:53.431 18271:18271 D/         ]
                                                                   HostConnection::get() New Host Connection established 0xaa1a87d0, tid 18271


                                                                   [ 08-02 16:58:53.496 18271:18531 D/         ]
                                                                   HostConnection::get() New Host Connection established 0xadc47ba0, tid 18531
08-02 16:58:53.501 18271-18531/com.parse.starter I/OpenGLRenderer: Initialized EGL, version 1.4
08-02 17:09:48.803 20084-20084/com.parse.starter W/System: ClassLoader referenced unknown path: /data/app/com.parse.starter-2/lib/x86
08-02 17:09:53.513 20084-20084/com.parse.starter W/System: ClassLoader referenced unknown path: /data/app/com.parse.starter-2/lib/x86
08-02 17:09:53.870 20084-20192/com.parse.starter D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true

                                                                   [ 08-02 17:09:53.875 20084:20084 D/         ]
                                                                   HostConnection::get() New Host Connection established 0xaa1a76f0, tid 20084


                                                                   [ 08-02 17:09:53.913 20084:20192 D/         ]
                                                                   HostConnection::get() New Host Connection established 0xadc47b70, tid 20192
08-02 17:09:53.917 20084-20192/com.parse.starter I/OpenGLRenderer: Initialized EGL, version 1.4
08-02 17:15:47.485 25321-25321/com.parse.starter W/System: ClassLoader referenced unknown path: /data/app/com.parse.starter-2/lib/x86
08-02 17:15:49.386 25321-25321/com.parse.starter W/System: ClassLoader referenced unknown path: /data/app/com.parse.starter-2/lib/x86
08-02 17:15:49.730 25321-25384/com.parse.starter D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true

                                                                   [ 08-02 17:15:49.733 25321:25321 D/         ]
                                                                   HostConnection::get() New Host Connection established 0xaa1a9010, tid 25321


                                                                   [ 08-02 17:15:49.763 25321:25384 D/         ]
                                                                   HostConnection::get() New Host Connection established 0xaa1a8e60, tid 25384
08-02 17:15:49.769 25321-25384/com.parse.starter I/OpenGLRenderer: Initialized EGL, version 1.4
08-02 17:16:16.054 25321-25321/com.parse.starter I/SaveInBackground: Failed
08-02 17:16:16.055 25321-25321/com.parse.starter W/System.err: com.parse.ParseRequest$ParseRequestException: unauthorized
08-02 17:16:16.055 25321-25321/com.parse.starter W/System.err:     at com.parse.ParseRequest.newPermanentException(ParseRequest.java:270)
08-02 17:16:16.055 25321-25321/com.parse.starter W/System.err:     at com.parse.ParseRESTCommand.onResponseAsync(ParseRESTCommand.java:301)
08-02 17:16:16.055 25321-25321/com.parse.starter W/System.err:     at com.parse.ParseRESTUserCommand.onResponseAsync(ParseRESTUserCommand.java:126)
08-02 17:16:16.055 25321-25321/com.parse.starter W/System.err:     at com.parse.ParseRequest$3.then(ParseRequest.java:137)
08-02 17:16:16.055 25321-25321/com.parse.starter W/System.err:     at com.parse.ParseRequest$3.then(ParseRequest.java:133)
08-02 17:16:16.055 25321-25321/com.parse.starter W/System.err:     at bolts.Task$15.run(Task.java:917)
08-02 17:16:16.055 25321-25321/com.parse.starter W/System.err:     at bolts.BoltsExecutors$ImmediateExecutor.execute(BoltsExecutors.java:105)
08-02 17:16:16.055 25321-25321/com.parse.starter W/System.err:     at bolts.Task.completeAfterTask(Task.java:908)
08-02 17:16:16.055 25321-25321/com.parse.starter W/System.err:     at bolts.Task.continueWithTask(Task.java:715)
08-02 17:16:16.055 25321-25321/com.parse.starter W/System.err:     at bolts.Task.continueWithTask(Task.java:726)
08-02 17:16:16.055 25321-25321/com.parse.starter W/System.err:     at bolts.Task$13.then(Task.java:818)
08-02 17:16:16.055 25321-25321/com.parse.starter W/System.err:     at bolts.Task$13.then(Task.java:806)
08-02 17:16:16.055 25321-25321/com.parse.starter W/System.err:     at bolts.Task$15.run(Task.java:917)
08-02 17:16:16.055 25321-25321/com.parse.starter W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
08-02 17:16:16.055 25321-25321/com.parse.starter W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
08-02 17:16:16.055 25321-25321/com.parse.starter W/System.err:     at java.lang.Thread.run(Thread.java:818)

【问题讨论】:

  • 好吧,我正在使用back4app.com,因为 parse.com 即将关闭。
  • 你初始化解析SDK了吗?如果可以,请您将代码粘贴到您初始化它的位置吗?
  • 初始化是什么意思?我只是通过导入现有项目来导入 sdk。并添加 app-id 和客户端 ID。然后在 onCreate 方法的 MainActivity 类中添加一些代码。
  • 在您开始运行查询或与 parse SDK 进行任何交互之前,您需要对其进行初始化并发送您的应用程序和客户端密钥
  • 我应该怎么做?我已将 app-id 和客户端密钥插入 string.xml 文件。

标签: java android android-studio parse-platform back4app


【解决方案1】:

通常您获得 UnAuthorized 的原因是您没有启动解析 SDK,或者您没有发送正确的 APP_ID 和/或 CLIENT_KEY 为了做到这一点,请执行以下操作:

  1. 使用以下代码启动 Parse SDK

    Parse.initialize(new Parse.Configuration.Builder(getApplicationContext())
            .applicationId("{YOUR_APP_ID}")
            .server("{YOUR_ENDPOINT_URL}")
            .clientKey("{YOUR_CLIENT_KEY}")
            .build());   
    
  2. 启动 Parse SDK 后,您可以使用

    注册/登录用户
    ParseUser.logInInBackground("{USER}", "{PASSWORD}", new LogInCallback() {
        @Override
        public void done(ParseUser user, ParseException e) {
    
        }
    });
    

    或使用以下代码注册:

    ParseUser 用户 = 新 ParseUser(); user.setEmail("{EMAIL}"); user.setUsername("{USERNAME}"); user.setPassword("{PASSWORD}"); user.put("firstName","{FIRST_NAME}"); // 在此处添加更多属性

    user.signUpInBackground(new SignUpCallback() {
        @Override
        public void done(ParseException e) {
    
        }
    });
    
  3. 确认所有细节都正常后,您可以继续查询、创建、更新或删除解析对象

祝你好运:)

【讨论】:

  • 非常感谢。但是你能告诉我在哪里获得端点网址吗?在哪里粘贴该代码?
  • 端点 URL 是您的 REST API URL,因此在您的情况下,如果在您的本地主机上,它将是 localhost:1337/parse,如果已部署,那么它将是您 http://{deploy_url}: 1337/parse 1337 是默认端口,因此如果您将其更改为另一个端口,请确保您也更改了它。在客户端
【解决方案2】:

Parse 为开发者提供了许多托管计划,免费计划用户对存储、访问和请求有一定的限制。就我而言,由于完成了所有“request/month”,我收到了这个错误。

对于免费计划,用户可以有 每月 10k 请求。之后你必须升级计划,否则他们会阻止你的权限。

我附上了屏幕截图,您可以在解析应用的计费部分找到它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2018-06-15
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多