Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:使用设备名而不是ip地址进行rest呼叫_Java_Android_Spring_Rest - Fatal编程技术网

Java Android:使用设备名而不是ip地址进行rest呼叫

Java Android:使用设备名而不是ip地址进行rest呼叫,java,android,spring,rest,Java,Android,Spring,Rest,我正在创建一个android应用程序,其中我使用rest调用与服务器中的控制器类进行连接。在这里,我使用rest调用url中的系统ip地址,并且工作正常。但问题是,如果系统ip发生变化,我需要每天更改url中的ip地址。我无法使用localhost,因为它将调用android sdk emulator,应用程序在其中工作,而不是控制器和服务器所在的系统。因此,我决定使用机器名“myDevice3”。但当其余部分调用时,会产生异常,如下所示 FATAL EXCEPTION: main org.s

我正在创建一个android应用程序,其中我使用rest调用与服务器中的控制器类进行连接。在这里,我使用rest调用url中的系统ip地址,并且工作正常。但问题是,如果系统ip发生变化,我需要每天更改url中的ip地址。我无法使用localhost,因为它将调用android sdk emulator,应用程序在其中工作,而不是控制器和服务器所在的系统。因此,我决定使用机器名“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地址一起使用的rest呼叫

String accList=restTemplate.getForObject("http://192.168.1.19:8080/SaveIt/stock/getCoaList/{parentId}", String.class, 10);

它的工作很好,如果我在swing桌面应用程序rest调用中使用机器名也没有问题。如果将192.168.1.19替换为myDevice3,则会发生上述异常。因此,仅当从android emulator调用我的系统时才会发生异常。请帮助我解决此问题。

您的浏览器和swing应用程序确实知道您的主机名。这就是为什么他们可以连接到它。但安卓(Dalvik)并不知道这一点

在dalvik.system.NativeStart.main(本机方法),由以下原因引起: java.net.UnknownHostException:myDevice3

确保你的Android手机知道它是myDevice3

实际上,这不是正确的方法。您的手机应该是客户端,并使用一些静态名称/IP地址连接到服务器。
是的,因为它是Java,所以您可以在手机上创建服务器。甚至有一些应用程序提供对手机的网络访问。但这些应用程序的常见方法是显示弹出屏幕,上面写着-连接到这个特定的IP地址。

您的浏览器和Swing应用程序确实知道您的主机名。这就是为什么他们可以连接到它。但安卓(Dalvik)并不知道这一点

在dalvik.system.NativeStart.main(本机方法),由以下原因引起: java.net.UnknownHostException:myDevice3

确保你的Android手机知道它是myDevice3

实际上,这不是正确的方法。您的手机应该是客户端,并使用一些静态名称/IP地址连接到服务器。
是的,因为它是Java,所以您可以在手机上创建服务器。甚至有一些应用程序提供对手机的网络访问。但这些应用程序的常用方法是显示弹出屏幕,上面写着“连接到此特定IP地址”。

使用“http://10.0.2.2:8080/SaveIt/stock/getCoaList/{parentId}“而不是您的url

使用”http://10.0.2.2:8080/SaveIt/stock/getCoaList/{parentId}”不是您的url,而是您的url在浏览器上工作吗?是的。它在浏览器上工作正常browser@Exbury:如果我在swing desktop应用程序rest调用中使用机器名,也没有问题。url是否在浏览器上工作?是。它在浏览器上正常工作browser@Exbury:如果我在swing中使用机器名称,也没有问题桌面应用程序rest调用url是否在浏览器上工作?是。它在浏览器上工作正常browser@Exbury:如果我在swing desktop应用程序rest Call中使用机器名也没有问题。你能详细解释一下吗?…如何确保我的android手机知道这个机器名?android与其他任何计算机都是同一台计算机。所有规则都适用。我所做的-打开控制台,使用标准的unix工具处理域名、nslookup、ping,并确保手机知道另一台计算机的名称。下面是一些方法。你能详细解释一下吗……如何确保我的安卓手机知道这个机器名?安卓和其他任何东西都是同一台电脑。所有规则都适用。我所做的-打开控制台,使用标准的unix工具处理域名、nslookup、ping,并确保手机知道另一台计算机的名称。下面是一些方法。你能详细解释一下吗……如何确保我的安卓手机知道这个机器名?安卓和其他任何东西都是同一台电脑。所有规则都适用。我所做的-打开控制台,使用标准的unix工具处理域名、nslookup、ping,并确保手机知道另一台计算机的名称。下面是一些如何做到这一点的方法。