android - java.net.UnknownHostException: Kan ikke løse vært [[LOCAL]]

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger INTERNET bruger-tilladelse i manifestfilen.


Hvis jeg skriver URL url = new URL('http://www.example.com/page') (fjernserver), vil den fungere.
Men hvis jeg skriver URL url = new URL('http://example.local/page') (lokal server), returneres fejlen


java.net.UnknownHostException: Unable to resolve host "example.local": No address associated with hostname


Nu i \%WINDIR\%/System32/drivers/etc/hosts skrev jeg denne post:


10.101.0.179  example.local


Jeg kan ikke bruge new URL('http://10.101.0.179/page') fordi example.local er en virtualHost i min apache-konfiguration.


Kan jeg ikke se min AVD i filen værter ? Hvad skal jeg gøre for at fortælle android at hente ip 10.101.0.179, men stadig sende en ordentlig information til apache og fortælle den at tjene den virtuelle vært example.local?

Bedste reference


Hvis du forsøger at anmode om en webside fra din lokale HTTP-server, og siden er afgrænset til en virtualHost , så lad os sige, at du skal nå http://example.local/mypage og hvis som påpeget af @CommonsWare du don't bruge mDNS til at løse inter-lokale domænenavne, android vil sandsynligvis smide den samme fejlmeddelelse som den læser i titlen på dette spørgsmål. Her er løsningen jeg bruger:


lad os sige http://example.local/mypage henviser til ip-adressen 10.101.0.179, kan Android ikke løse example.local, du skal skrive den rå url (af din aktuelle lokale server)


try {
  ...
  URL url = new URL("http://10.101.0.179/mypage");
  HttpUrlConnection conn = (HttpUrlConnection) url.openConnection();
  ...
}
...


Men nu, når Apache modtager denne anmodning, vil det ikke blive forstået i tilfælde af en VirtualHost , hvis du ikke serverer din ønskede vært 10.101.0.179. For at omgå dette problem skal du bare ændre Host http-headeregenskab ved hjælp af setRequestProperty:


...
conn.setRequestProperty("Host", "example.local");
...


Og det skal fungere.

Andre referencer 1


Først skal du kontrollere, om du har givet tilladelse til INTERNET i din manifestfil eller ej. For det andet skal du sørge for, at din emulator eller computer har et gyldigt internet. Hvis det ikke virker, end du kan gøre følgende:


Hvis du bruger localhost url, end du skal konvertere den url til IP-adresse for at arbejde med App specielt ved hjælp af Android-emulatoren.


For eksempel :


Min nuværende url er


http://mylocaladdress:9090/myapp.svc/ForgetPassword?EmailID=test@test.com


Nu kan du sætte følgende kommando i terminal på mac eller du kan bruge cmd på windows


ping mylocaladdress


Resultatet vil give dig IP-adressen og min sidste webadresse bliver


http://10.1.2.111:9090/myapp.svc/ForgetPassword?EmailID=test@test.com


Denne url fungerede perfekt i android emulator uden undtagelse.