DefaultHttpClient extremt seg på GET request

Diskussion i 'Frågor, support och diskussion' startad av Pajn, 7 jun 2011.

  1. Pajn

    Pajn Adult Droid Medlem

    Blev medlem:
    12 aug 2009
    Inlägg:
    606
    Mottagna gillanden:
    51

    MINA ENHETER

    Jag håller på med en app som är väldigt beroende av GET requests, men har ett stort problem: En request tar ca. 3sek!

    Att skicka ett request ifrån webbläsaren går snabbt så det är inte anslutningen eller webbservern det är fel på.

    Koden:
    Kod:
            Button play = (Button) findViewById(R.id.buttonPlay);
            play.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
    
                	HttpClient httpclient = new DefaultHttpClient();
                    String getURL = "http://" + ip + ":90/&cmd&toggle";
                    HttpGet get = new HttpGet(getURL);
                    try {
                    	httpclient.execute(get);
    				} catch (ClientProtocolException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				} catch (IOException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
                }
            });
    Jag har även testat att lägga till
    Kod:
                	HttpParams params = new BasicHttpParams();
                	params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
    (och självklart skicka parms till DefaultHttpClient())
    men utan verkan.

    Eftersom det är jag som har gjort webservern så har jag testat lite olika saker på den också. Det enda som verkar fixa problemet är att inte skicka ut någon respons(200). Problemet är då att DefaultHttpClient ibland gör flera försök att ansluta, jag vill bara ha ett.

    Det kan vara så att jag behöver skicka ut något mer, men jag vet inte vad?
    Jag har testat att bara skicka respons, skicka respons & content-type headers, skicka respons & content-type headers & OK som text.
    Det går ju som sagt bra att ansluta med webbläsaren både på telefonen och datorn. Det går även bra att skicka GET requests ifrån javascript.
     
  2. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 okt 2009
    Inlägg:
    2 349
    Mottagna gillanden:
    835
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    Har du samma problem både via emulator och riktig telefon?
     
  3. Pajn

    Pajn Adult Droid Medlem

    Blev medlem:
    12 aug 2009
    Inlägg:
    606
    Mottagna gillanden:
    51

    MINA ENHETER

    Emulatorn tycker jag inte om, den funkar perfekt ibland (snabb) och ibland är den lika seg som telefonen. Så jag vet inte riktigt :/
     
  4. Pajn

    Pajn Adult Droid Medlem

    Blev medlem:
    12 aug 2009
    Inlägg:
    606
    Mottagna gillanden:
    51

    MINA ENHETER

    Gud så pinsamt. Det var webbservern. En bugg i pythons libarys gör att den ibland gör en DNS uppslagning på ipadressen , något som tar ca. 3 sekunder.
    Jag får försvara mig med att jag inte trodde att det skulle finnas sånna buggar i ett inbyggt libary till ett språk. Jag menar, koden ska ju inte ens finnas där. Det enda den använder DNS uppslagningen till är att logga adressen istället för ip adressen. Som tur var fanns det en workaround som cachar uppslagningen efter första gången.

    Men aja, då är det bara att koda vidare. Förhoppningsvis finns det snart en alfaversion av en ny app ute :)