我正在创建一个Android应用程序,我在其中使用rest调用来与服务器中的控制器类建立连接。这里我在其余的调用url中使用系统ip地址并且工作正常。但问题是我需要如果系统ip改变,在每天更改url中的ip地址。我不能使用localhost,因为它将调用应用程序正在运行的android sdk模拟器,而不是控制器和服务器所在的系统。所以我决定使用机器名称“myDevice3”。但是当其余部分调用时,它会导致异常
FATAL EXCEPTION: main
org.springframework.web.client.ResourceAccessException: I/O error: myDevice3; nested exception is java.net.UnknownHostException: myDevice3
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:456)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:404)
at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:202)
at com.app.saveitand.MainActivity.getListData(MainActivity.java:668)
at com.app.saveitand.MainActivity.loadExpense(MainActivity.java:742)
at com.app.saveitand.MainActivity$10.onItemClick(MainActivity.java:238)
at android.widget.AdapterView.performItemClick(AdapterView.java:284)
at android.widget.ListView.performItemClick(ListView.java:3513)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.net.UnknownHostException: myDevice3
at java.net.InetAddress.lookupHostByName(InetAddress.java:506)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:294)
at java.net.InetAddress.getAllByName(InetAddress.java:256)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
at org.springframework.http.client.HttpComponentsClientHttpRequest.executeInternal(HttpComponentsClientHttpRequest.java:82)
at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:52)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:441)
以下是我使用ip地址
的休息电话String accList=restTemplate.getForObject("http://192.168.1.19:8080/SaveIt/stock/getCoaList/{parentId}", String.class, 10);
并且它工作正常,如果我在我的swing桌面应用程序中使用机器名称也没有问题。如果用myDevice3替换192.168.1.19,则会发生异常。所以只有在从android模拟器调用时才会发生异常到我的系统。请帮我解决这个问题。
答案 0 :(得分:2)
您的浏览器和Swing应用确实知道您的主机名。这就是为什么他们可以连接到它。但Android(Dalvik)并不知情。
at dalvik.system.NativeStart.main(Native Method)引起: java.net.UnknownHostException:myDevice3
确保您的Android手机知道它是myDevice3。
实际上这不是正确的做法。您的手机应该是客户端,并使用一些最好的静态名称/ IP地址连接到服务器。 是的,因为它是Java,你可以在手机上制作服务器。甚至有一些应用程序甚至可以为手机提供Web访问。但是这些应用程序的常见方法是显示弹出屏幕,其中显示 - 连接到此特定IP地址。
答案 1 :(得分:-2)
使用“ http://10.0.2.2:8080/SaveIt/stock/getCoaList/{parentId}”代替您的网址