Articles of android networking

android如何获取指示何时互联网连接丢失?

我正在开发一个Android应用程序,我想在互联网(wifi或分组数据连接)连接丢失时收到通知。 在我的方法中,我可以获得连接的状态: private boolean isNetworkAvailable() { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); return activeNetworkInfo != null && activeNetworkInfo.isConnected(); } 在清单中有这个: 如何在连接丢失时自动通知我?

如何检查Wifi是否已连接,但Android中无法访问Internet

我想知道为什么wifi连接但Android没有互联网访问。 我怎么检查它? 我的代码是: ConnectivityManager cn=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo nf=cn.getActiveNetworkInfo(); if(nf != null && nf.isConnected() ) { Flag2=false; Log.e(“network——–“, “1————–“); if (cn.getActiveNetworkInfo().isConnectedOrConnecting()) {Log.e(“network——–“, “11111111111111————–“); } else {Log.e(“network——–“, “2222222222222————–“); } } else { Log.e(“network——–“, “2————–“); }

OKhttp PUT示例

我的要求是使用PUT ,向服务器发送标题和正文,这将更新数据库中的内容。 我刚刚阅读了okHttp文档 ,我试图使用他们的POST示例,但它不适用于我的用例(我想这可能是因为服务器要求我使用PUT而不是POST ) 。 这是我用POST方法: public void postRequestWithHeaderAndBody(String url, String header, String jsonBody) { MediaType JSON = MediaType.parse(“application/json; charset=utf-8”); RequestBody body = RequestBody.create(JSON, jsonBody); OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(url) .post(body) .addHeader(“Authorization”, header) .build(); makeCall(client, request); } 我曾尝试使用PUT搜索okHttp示例但没有成功,如果我需要使用PUT方法,那么反正使用okHttp? 我正在使用okhttp:2.4.0(以防万一),感谢任何帮助!

Android排球 – 方向变化

我们如何处理方向变化,使用Volley停止/恢复Activities / Fragments ? 我知道对于GET请求,响应将被缓存,第二次我们尝试发出请求时,我们将获得缓存响应。(如果服务器发送正确的HTTP头) 但是POST怎么样? 假设我发出POST请求(即注册,我想只发生一次),我的应用程序转到后台,请求完成,而应用程序仍在后台,然后我回到应用程序。 如何获取该Request的Response ,或者如果它仍然未决,如何重新连接到该请求? AFAIK在Volley几乎没有支持。 我对吗? 使用Volley有一种简单的方法可以解决上述情况吗?

为什么HttpUrlConnection在移动数据连接上抛出SSLException?

当使用Android的HttpUrlConnection库发出HTTPS请求时,我有时会看到抛出以下exception: javax.net.ssl.SSLException: SSL handshake aborted: ssl=0x5c1b18a0: I/O error during system call, Connection reset by peer at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method) at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:395) … 在深入研究这个问题之后,我已经了解到了这一点 在wifi上一切正常 仅当设备处于移动数据连接时才会抛出exception 在首先通过wifi进行HTTPS之后,通过移动数据进行连接往往会在一段时间内正常工作 问题似乎发生在少数特定的移动运营商身上 可能会发生什么? 某些移动运营商是否会干扰HTTPS流量?

Android Volley MalformedURLException错误的URL

在使用Volley发出第二个网络请求后,我总是收到此错误。 我输入的url似乎并不重要。 Volley总是声称它是畸形的。 08-04 20:16:26.885 14453-14470/com.thredup.android E/Volley﹕ [994] NetworkDispatcher.run: Unhandled exception java.lang.RuntimeException: Bad URL java.lang.RuntimeException: Bad URL at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:127) at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:110) Caused by: java.net.MalformedURLException: Protocol not found: at java.net.URL.(URL.java:176) at java.net.URL.(URL.java:125) at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:101) at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:93) 进一步调查,我在HurlStack中放了几个日志。 在 public HttpResponse performRequest(Request request, Map additionalHeaders), 失败的请求是REQUEST [ ] 0x0 LOW 26. “ 因此,HurlStack的第101行: URL parsedUrl = new […]

Android API-23:InetAddressUtils替换

切换到Android Marshmallow API,我在代码中使用org.apache.http.conn.util.InetAddressUtils for InetAddressUtils.isIPv4Address(ipAddress)列出设备中的所有IP。 作为API-23更改的一部分 , InetAddressUtils类现已消失。 我现在如何替换以下代码? public static String ipAddress() { try { for (final Enumeration enumerationNetworkInterface = NetworkInterface.getNetworkInterfaces(); enumerationNetworkInterface.hasMoreElements();) { final NetworkInterface networkInterface = enumerationNetworkInterface.nextElement(); for (Enumeration enumerationInetAddress = networkInterface.getInetAddresses(); enumerationInetAddress.hasMoreElements();) { final InetAddress inetAddress = enumerationInetAddress.nextElement(); final String ipAddress = inetAddress.getHostAddress(); if (! inetAddress.isLoopbackAddress() && InetAddressUtils.isIPv4Address(ipAddress)) { return ipAddress; } […]

使用Android Retrofit进行POST

我是Android编程的新手,也在使用Retrofit。 我已就这个主题做了大量研究,但未能find特定于我需求的解决方案。 我正在使用我们的API并尝试发出POST请求。 我使用以下非Retrofit代码成功实现了此目的: private class ProcessLogin extends AsyncTask { private ProgressDialog pDialog; String email,password; protected void onPreExecute() { super.onPreExecute(); inputEmail = (EditText) findViewById(R.id.email); inputPassword = (EditText) findViewById(R.id.password); email = inputEmail.getText().toString(); password = inputPassword.getText().toString(); pDialog = new ProgressDialog(LoginActivity.this); pDialog.setTitle(“Contacting Servers”); pDialog.setMessage(“Logging in …”); pDialog.setIndeterminate(false); pDialog.setCancelable(true); pDialog.show(); } protected JSONObject doInBackground(Void… params) { HttpURLConnection connection; OutputStreamWriter […]

屏幕打开时,Wi-Fi或CPU是否可以进入睡眠状态?

Android上有WakeLock和WifiLock – 如果我的屏幕永远不会关闭,我是否需要这些? 我使用持久连接(例如WebSockets)几十分钟甚至几小时。 我的屏幕是否总是足以防止设备丢失这些连接(如果我们假设连接仍然可用且服务器正常)? 为了保持屏幕,我使用标准方式: getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 文档说的是什么: 为了避免耗尽电池,一个闲置的Android设备很快就会睡着了。 ( https://developer.android.com/training/scheduling/wakelock.html ) 通常,当用户暂时不使用设备时,Wi-Fi无线电可能会关闭。 ( http://developer.android.com/reference/android/net/wifi/WifiManager.WifiLock.html ) 这是否意味着…… 当用户长时间不与设备交互时(即使屏幕仍然打开),Wi-Fi无线电或CPU可能会进入睡眠模式或关闭? 而且,更具体地说,当仍有Activity使屏幕保持打开时,后台任务(例如IntentService )的Wi-Fi或移动数据连接是否可以进入hibernate状态?

如何获得IPV4格式的IP_ADDRESS

我试图获取设备的IP地址,即使用WIFI或3G连接。 我收到了IPV6格式的IP地址,这是不可理解的。 我想要IPV4格式的IP地址。我已经谷歌但dintfind了任何适当的解决方案。 这是我用来获取设备IP地址的代码 public String getLocalIpAddress() { try { try { for (Enumeration en = NetworkInterface .getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inetAddress = enumIpAddr.nextElement(); System.out.println(“ip1–:” + inetAddress); System.out.println(“ip2–:” + inetAddress.getHostAddress()); if (!inetAddress.isLoopbackAddress()) { String ip = inetAddress.getHostAddress().toString(); System.out.println(“ip—::” + ip); EditText tv = (EditText) […]