6

Google Cloud Endpoint'in neden uygulama motor örneğime ulaşılmadan önce unexpected end of stream istisnasını atmaya devam ettiğini bilen var mı? Son noktayı aradığımda aşağıdaki hatayı almaya devam ediyorum. Çoğu yerde hata, diğer her aramadan sonra gösterilir; Nadir diğerleri de tutarlı.Google Cloud Endpoint, "beklenmedik bir akış sonu" özelliğini atmaya devam ediyor

05-06 18:32:28.335: W/System.err(11783): java.io.IOException: unexpected end of stream 
05-06 18:32:28.343: W/System.err(11783): at libcore.net.http.FixedLengthOutputStream.close(FixedLengthOutputStream.java:58) 
05-06 18:32:28.343: W/System.err(11783): at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:82) 
05-06 18:32:28.343: W/System.err(11783): at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:980) 
05-06 18:32:28.343: W/System.err(11783): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:412) 
05-06 18:32:28.343: W/System.err(11783): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:345) 
05-06 18:32:28.343: W/System.err(11783): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:463) 
… 

05-06 18:32:28.343: W/System.err(11783): at android.os.AsyncTask.finish(AsyncTask.java:631) 
05-06 18:32:28.343: W/System.err(11783): at android.os.AsyncTask.access$600(AsyncTask.java:177) 
05-06 18:32:28.343: W/System.err(11783): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
05-06 18:32:28.343: W/System.err(11783): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-06 18:32:28.343: W/System.err(11783): at android.os.Looper.loop(Looper.java:137) 
05-06 18:32:28.343: W/System.err(11783): at android.app.ActivityThread.main(ActivityThread.java:4849) 
05-06 18:32:28.343: W/System.err(11783): at java.lang.reflect.Method.invokeNative(Native Method) 
05-06 18:32:28.343: W/System.err(11783): at java.lang.reflect.Method.invoke(Method.java:511) 
05-06 18:32:28.343: W/System.err(11783): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
05-06 18:32:28.343: W/System.err(11783): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 
05-06 18:32:28.343: W/System.err(11783): at dalvik.system.NativeStart.main(Native Method) 

BTW: böyle 20 ila 50 karakter dize olabilecek bir belirteç, doğrulama gibi küçük operasyonlar için bile bu hatayı alabilirsiniz.

+0

Bitiş noktası kodunuzu verir misiniz lütfen? – MikO

+0

Bunun için açık bir GAE sorunu var: https://code.google.com/p/googleappengine/issues/detail?id=9291 – Tom

+0

Ve açık bir google java API istemcisi sorunu: https://code.google .com/p/google-http-java-client/issues/detail? id = 230 – Tom

cevap

1

Aynı sorunu alıyorum, her zaman bu "beklenmeyen akış sonu" IOE istisnasını alıyorum. Dediğin gibi appengine'de kayıt yok. Birkaç uç noktaya sahip bir dersim var ama bu sadece bunlardan birine geliyor. Ben aynı sorunu vardı

@ApiMethod(name = "blablabla", httpMethod = HttpMethod.POST) 
public static ooooo createCDR(@Named("iiii") String iiii, 
     @Named("uuuu") String uuuu, @Named("cccc") Long cccc, 
     @Named("aaaa") int aaaa, User user) 
+0

Görülmekte olan belirli Api yöntemiyle ilişkili görünmüyor. Diğer sınıflarda iyi çalışan diğerlerini denedim ama bu özellikle başarısız oluyorlar. Tek fark, tüm işe yarayan son noktaların faaliyetlerden çağrılması ve yöntemin başarısız olmasını sağlayan bu sınıfın bir hizmet tarafından çağrılan bir işleyicidir. – Miguel

+1

Bir appengine sorunu yarattım: https://code.google.com/p/googleappengine/issues/detail?id=9291&thanks=9291&ts=1368199444 – Miguel

+0

Hataları yakalamak ve uygulamalarınızı kontrol etmek için uygulama motoru uygulamasına fazladan kayıt ekleyebilir misiniz? herhangi bir ipucu alabilir. Bir fikir edinmek için bu google belgesini bir örnekle kontrol edin: [appengine'da oturum açma] (https://developers.google.com/appengine/articles/logcing) –

0

:

Bu

Api Yöntemi yapıdır. Sorun şu ki, uç noktalarla iletişim UI/ana iş parçacığı üzerinde OLMAMALIDIR. En kolay yolu, bu thislike gibi örneğin basit ASyncTask oluşturmaktır:

private class InsertTask extends AsyncTask<Void, Void, Void> { 
    Exception exceptionThrown = null; 
    TargetEndpoint targetEndpoint; 
    Target target; 

    public InsertMessageTask(Activity activity, TargetEndpoint targetEndpoint, Target target) { 
     this.messageEndpoint= messageEndpoint; 
     this.target= target; 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     try { 
      targetEndpoint.insertTarget(target).execute(); 
     } catch (IOException e) { 
      exceptionThrown = e; 
     } 

     return null; 
    } 

    protected void onPostExecute(Void arg) { 
     TheActivity.this.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       if (exceptionThrown == null) 
        Toast.makeText(TheActivity.this, "Success!", Toast.LENGTH_LONG).show(); 
       else 
        Toast.makeText(TheActivity.this, "Error occured: '" + exceptionThrown.getMessage(), Toast.LENGTH_LONG).show(); 

      } 
     }); 
    } 
} 

O hata mesajı daha Belirtilen olabilir katılıyorum, ama onun nedeni vardır. Performansını azaltabileceği için, ui thread üzerinde pahalı yöntemler çalıştırmak istemezsiniz.