Android Studio 获取请求 java.io.FileNotFoundException: http://10.0.2.2
Android Studio Get request java.io.FileNotFoundException: http://10.0.2.2
我正在开发 android 应用程序,它应该将 GCS 注册令牌发送到本地主机上 运行 的 .NET MVC 服务。我正在使用 android 仿真器 API 23 版本。我已经消除了几乎所有可能出错的东西,URL 和我现在发送的参数是硬编码的,如果我将粘贴 url 复制到浏览器中(显然用 localhost 替换 10.0.2.2)一切正常。我正在使用提琴手,但应该来自 android 的请求没有被注册。
我得到的是 InputStream inputStream = connection.getInputStream();
行
上的 IO 异常
1-18 18:26:28.305 3488-3524/gcm.play.android.samples.com.gcmquickstart
W/System.err: java.io.FileNotFoundException:
http://10.0.2.2:61594/api/Account/RegisterDevice?token=2342342&coordinates=12.012;13.1515
01-18 18:26:28.305
3488-3524/gcm.play.android.samples.com.gcmquickstart W/System.err:
at
com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:238)
01-18 18:26:28.305
3488-3524/gcm.play.android.samples.com.gcmquickstart W/System.err:
at
gcm.play.android.samples.com.gcmquickstart.RegistrationIntentService.sendRegistrationToServer(RegistrationIntentService.java:108)
01-18 18:26:28.305
3488-3524/gcm.play.android.samples.com.gcmquickstart W/System.err:
at
gcm.play.android.samples.com.gcmquickstart.RegistrationIntentService.onHandleIntent(RegistrationIntentService.java:69)
01-18 18:26:28.305
3488-3524/gcm.play.android.samples.com.gcmquickstart W/System.err:
at
android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:66)
01-18 18:26:28.306
3488-3524/gcm.play.android.samples.com.gcmquickstart W/System.err:
at android.os.Handler.dispatchMessage(Handler.java:102) 01-18
18:26:28.306 3488-3524/gcm.play.android.samples.com.gcmquickstart
W/System.err: at android.os.Looper.loop(Looper.java:148) 01-18
18:26:28.306 3488-3524/gcm.play.android.samples.com.gcmquickstart
W/System.err: at
android.os.HandlerThread.run(HandlerThread.java:61)
在手表中 connection.getResponseCode()
状态代码是 400(错误请求)- 但服务器甚至没有被击中。
我在清单中配置了以下权限:
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
发出请求的代码:
StringBuffer chaine = new StringBuffer("");
try{
URL url = new URL("http://10.0.2.2:61594/api/Account/RegisterDevice?token=2342342&coordinates=12.012;13.1515");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestProperty("User-Agent", "");
connection.setRequestMethod("GET");
connection.setDoInput(true);
connection.connect();
InputStream inputStream = connection.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while ((line = rd.readLine()) != null) {
chaine.append(line);
}
} catch (IOException e) {
// writing exception to log
e.printStackTrace();
}
来自 .NET 服务器的代码
[AllowAnonymous]
[System.Web.Http.AcceptVerbs("GET", "POST")]
[System.Web.Http.HttpGet]
public void RegisterDevice(string token, string coordinates)
{
if (string.IsNullOrWhiteSpace(token))
{
throw new ArgumentNullException("Token is empty");
}
var data = new Data.EmergencyService();
if (data.AddUser(token, coordinates))
{
HttpContext.Current.Response.StatusCode = 200;
}
}
在我无法让 fiddler 注册请求之后,我完全迷失了。
为什么我不能从在浏览器中完美运行的 Andriod Studio 发出请求 GET 请求?
好的,对于那些想知道 Android 无法在 http://10.0.2.2
上访问 PC 本地主机的原因的人来说是我 运行 来自 Visual Studio 的 MVC 服务处于调试模式.
一旦我配置了本地 IIS 服务器并发布了网站(到本地文件系统),Android 就能够在 http://10.0.2.2
上访问它。
希望这能为您节省一些时间。
我正在开发 android 应用程序,它应该将 GCS 注册令牌发送到本地主机上 运行 的 .NET MVC 服务。我正在使用 android 仿真器 API 23 版本。我已经消除了几乎所有可能出错的东西,URL 和我现在发送的参数是硬编码的,如果我将粘贴 url 复制到浏览器中(显然用 localhost 替换 10.0.2.2)一切正常。我正在使用提琴手,但应该来自 android 的请求没有被注册。
我得到的是 InputStream inputStream = connection.getInputStream();
行
1-18 18:26:28.305 3488-3524/gcm.play.android.samples.com.gcmquickstart W/System.err: java.io.FileNotFoundException: http://10.0.2.2:61594/api/Account/RegisterDevice?token=2342342&coordinates=12.012;13.1515 01-18 18:26:28.305 3488-3524/gcm.play.android.samples.com.gcmquickstart W/System.err:
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:238) 01-18 18:26:28.305 3488-3524/gcm.play.android.samples.com.gcmquickstart W/System.err:
at gcm.play.android.samples.com.gcmquickstart.RegistrationIntentService.sendRegistrationToServer(RegistrationIntentService.java:108) 01-18 18:26:28.305 3488-3524/gcm.play.android.samples.com.gcmquickstart W/System.err:
at gcm.play.android.samples.com.gcmquickstart.RegistrationIntentService.onHandleIntent(RegistrationIntentService.java:69) 01-18 18:26:28.305 3488-3524/gcm.play.android.samples.com.gcmquickstart W/System.err:
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:66) 01-18 18:26:28.306 3488-3524/gcm.play.android.samples.com.gcmquickstart W/System.err:
at android.os.Handler.dispatchMessage(Handler.java:102) 01-18 18:26:28.306 3488-3524/gcm.play.android.samples.com.gcmquickstart W/System.err: at android.os.Looper.loop(Looper.java:148) 01-18 18:26:28.306 3488-3524/gcm.play.android.samples.com.gcmquickstart W/System.err: at android.os.HandlerThread.run(HandlerThread.java:61)
在手表中 connection.getResponseCode()
状态代码是 400(错误请求)- 但服务器甚至没有被击中。
我在清单中配置了以下权限:
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
发出请求的代码:
StringBuffer chaine = new StringBuffer("");
try{
URL url = new URL("http://10.0.2.2:61594/api/Account/RegisterDevice?token=2342342&coordinates=12.012;13.1515");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestProperty("User-Agent", "");
connection.setRequestMethod("GET");
connection.setDoInput(true);
connection.connect();
InputStream inputStream = connection.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while ((line = rd.readLine()) != null) {
chaine.append(line);
}
} catch (IOException e) {
// writing exception to log
e.printStackTrace();
}
来自 .NET 服务器的代码
[AllowAnonymous]
[System.Web.Http.AcceptVerbs("GET", "POST")]
[System.Web.Http.HttpGet]
public void RegisterDevice(string token, string coordinates)
{
if (string.IsNullOrWhiteSpace(token))
{
throw new ArgumentNullException("Token is empty");
}
var data = new Data.EmergencyService();
if (data.AddUser(token, coordinates))
{
HttpContext.Current.Response.StatusCode = 200;
}
}
在我无法让 fiddler 注册请求之后,我完全迷失了。
为什么我不能从在浏览器中完美运行的 Andriod Studio 发出请求 GET 请求?
好的,对于那些想知道 Android 无法在 http://10.0.2.2
上访问 PC 本地主机的原因的人来说是我 运行 来自 Visual Studio 的 MVC 服务处于调试模式.
一旦我配置了本地 IIS 服务器并发布了网站(到本地文件系统),Android 就能够在 http://10.0.2.2
上访问它。
希望这能为您节省一些时间。