繁体   English   中英

Android-Parse.com-ParseRequestException:协议错误

[英]Android - Parse.com - ParseRequestException: bad protocol

我在我的应用程序中为后端使用parse,并且我收到了一个奇怪的异常,我无法弄清楚为什么,我不确定这是我的问题还是parsing end的问题,所以我以为id在这里问有人可以帮助我。

我在“这里”找到了类似的帖子,但没有答案,我的问题与我的查询非常相似,有时我的查询有时也会花费很长时间(一次保存查询需要5个小时),有时我会收到此异常:

    com.parse.ParseRequest$ParseRequestException: bad protocol
at com.parse.ParseRequest.java.util.concurrent.ThreadPoolExecutor newThreadPoolExecutor(int,int,long,java.util.concurrent.TimeUnit,java.util.concurrent.BlockingQueue,java.util.concurrent.ThreadFactory)(Unknown Source)
                       void initialize(android.content.Context)
                       bolts.Task onPreExecute(bolts.Task)
                       com.parse.ParseHttpBody newBody(com.parse.ProgressCallback)
                       com.parse.ParseHttpRequest newRequest(com.parse.ParseRequest$Method,com.parse.ProgressCallback)
                       bolts.Task onResponse(com.parse.ParseHttpResponse,com.parse.ProgressCallback)
                       bolts.Task executeAsync(com.parse.ProgressCallback,com.parse.ProgressCallback)
                       bolts.Task executeAsync(int,long,com.parse.ProgressCallback)
                       com.parse.ParseException newPermanentException(int,java.lang.String)
                       com.parse.ParseException newTemporaryException(java.lang.String,java.lang.Throwable)
                       com.parse.ParseHttpRequest access$000(com.parse.ParseRequest)
                       com.parse.ParseHttpRequest access$002(com.parse.ParseRequest,com.parse.ParseHttpRequest)
                       bolts.Task access$300(com.parse.ParseRequest,int,long,com.parse.ProgressCallback)
at com.parse.ParseRequest$2.bolts.Task then(bolts.Task)(Unknown Source)
at com.parse.ParseRequest$2.java.lang.Object then(bolts.Task)(Unknown Source)
at bolts.Task$14.void run()(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
 Caused by: org.apache.http.client.ClientProtocolException
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:589)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:511)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:489)
at com.parse.ParseApacheHttpClient.com.parse.ParseHttpResponse execute(com.parse.ParseHttpRequest)(Unknown Source)
                                com.parse.ParseHttpResponse getResponse(org.apache.http.HttpResponse)
                                void setParseRequestCancelRunnable(com.parse.ParseHttpRequest,org.apache.http.client.methods.HttpUriRequest)
at com.parse.ParseRequest$3.bolts.Task then(bolts.Task)(Unknown Source)
at com.parse.ParseRequest$3.java.lang.Object then(bolts.Task)(Unknown Source)
at bolts.Task$14.void run()(Unknown Source)
at bolts.BoltsExecutors$ImmediateExecutor.void execute(java.lang.Runnable)(Unknown Source)
at bolts.Task.boolean isFaulted()(Unknown Source)
           bolts.Task onSuccessTask(bolts.Continuation,java.util.concurrent.Executor)
           bolts.Task onSuccessTask(bolts.Continuation,java.util.concurrent.Executor,bolts.CancellationToken)
           bolts.Task onSuccessTask(bolts.Continuation)
           void completeAfterTask(bolts.Task$TaskCompletionSource,bolts.Continuation,bolts.Task,java.util.concurrent.Executor,bolts.CancellationToken)
at bolts.Task.boolean isCompleted()(Unknown Source)
           bolts.Task continueWithTask(bolts.Continuation,java.util.concurrent.Executor)
           bolts.Task continueWithTask(bolts.Continuation,java.util.concurrent.Executor,bolts.CancellationToken)
           bolts.Task continueWithTask(bolts.Continuation)
           void access$200(bolts.Task$TaskCompletionSource,bolts.Continuation,bolts.Task,java.util.concurrent.Executor,bolts.CancellationToken)
           boolean access$400(bolts.Task)
           boolean access$502(bolts.Task,boolean)
at bolts.Task.boolean isCompleted()(Unknown Source)
           bolts.Task continueWithTask(bolts.Continuation,java.util.concurrent.Executor)
           bolts.Task continueWithTask(bolts.Continuation,java.util.concurrent.Executor,bolts.CancellationToken)
           bolts.Task continueWithTask(bolts.Continuation)
           void access$200(bolts.Task$TaskCompletionSource,bolts.Continuation,bolts.Task,java.util.concurrent.Executor,bolts.CancellationToken)
           boolean access$400(bolts.Task)
           boolean access$502(bolts.Task,boolean)
at bolts.Task$12.bolts.Task then(bolts.Task)(Unknown Source)
at bolts.Task$12.java.lang.Object then(bolts.Task)(Unknown Source)
... 4 more
 Caused by: org.apache.http.client.NonRepeatableRequestException: Cannot retry request with a non-repeatable request entity
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:587)
... 16 more

现在下面这是最常发生的代码,也是恰好是应用程序最关键的部分,这很容易解释,但它是更新用户(我不是使用Parse User,而是我自己的自定义用户类出于我自己的原因)在解析时,如果由于某种原因该对象不存在ei被错误删除,我们将注册一个新对象,该异常总是从外部public void done(ParseObject parseUser, ParseException e)方法public void done(ParseObject parseUser, ParseException e)并且解析错误代码始终为100(ConnectionFailed-指示与解析服务器的连接失败。),代码如下:

public void updateUser(final User user) {
    ParseQuery<ParseObject> query = ParseQuery.getQuery(TABLE_NAME);

    query.getInBackground(user.getId(), new GetCallback<ParseObject>() {
        @Override
        public void done(ParseObject parseUser, ParseException e) {
            if (e == null) {
                parseUser.put(FIRST_NAME, user.getFirstName());
                parseUser.put(LAST_NAME, user.getLastName());
                parseUser.put(PASSWORD, user.getPassword());
                parseUser.put(COUNTRY, user.getCountry());
                parseUser.put(EMAIL, user.getEmail());
                parseUser.put(TELE, user.getTelephone());
                parseUser.put(IS_REGISTERED, user.isRegistered());
                parseUser.put(IS_ADMIN, user.isAdmin());
                parseUser.saveInBackground(new SaveCallback() {
                    @Override
                    public void done(ParseException e) {
                        if (e != null) {
                            TILogger.getLog().e(LOG_TAG, "Failed to save user in background with object id " + user.getId() + "to parse in ParseUserHelper.updateUser()",
                                    e, true, ParseHelper.LOG_FILE_NAME, true);
                        }
                    }
                });
            } else {
                TILogger.getLog().e(LOG_TAG, "Could not get user with object id " + user.getId() + " to update in ParseUserHelper.updateUser(), Parse error code: " + e.getCode()
                        + "\nUser information: first name = " + user.getFirstName() + ", last name = " + user.getLastName() + ", email = " + user.getEmail() + ", telephone = " + user.getTelephone(), e, true, ParseHelper.LOG_FILE_NAME, true);
                if(e.getCode() == ParseException.OBJECT_NOT_FOUND) {
                    registerUserToParse();
                }
            }
        }
    });
}

谁能帮助我做到这一点,真是太棒了,我会跪在他们面前,如果我错过了任何信息,请告诉我,我将确保更新我的帖子。

如果我没有答案,我将尝试通过电子邮件发送解析文件,并确保一旦我找到与所有人共享此原因的原因,因为我知道此问题令人沮丧。

谢谢伟大的堆栈溢出社区!

我不确定导致此错误的原因,但我可以建议3件事:

  1. 在“解析”仪表板中,转到自定义的“用户”表>“安全性”>“高级”,然后检查是否对每个人都启用了GET,或者至少对相应的ParseUser对象启用了GET。

  2. 如果一切正常,请尝试使用其他方法:使用User.getId()参数创建一个没有数据的对象,然后对该对象调用fetchInBackground()。

  3. 如果这两种方法都不起作用,请联系Parse支持(报告错误)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM