簡體   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