Android基础篇:Http连接网络

Luci_Ailan 8年前
   <p>这篇文章展示如何以最简单的方式通过http协议在app上与网络连接,并进行Json解析。</p>    <h2>添加许可</h2>    <p>在项目的manifest中添加许可:</p>    <pre>  <code class="language-java"><uses-permission android:name="android.permission.INTERNET" />  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /></code></pre>    <h2>检查网络连接</h2>    <p>设备可能在网络范围之外,或者连接网络失败。所以首先需要检查网络是否可用,可以通过以下两个方法: getActiveNetworkInfo() 和 isConnected() 。</p>    <p><img src="https://simg.open-open.com/show/57e63ae2112b69a7d63349d03717e86a.png"></p>    <h2>在子线程中进行网络操作</h2>    <p>从Android3.0(API level 11)之后,为了防止ANR的发生,Android不允许在主线程中进行网络操作,如果在主线程中进行,将会产生NetworkOnMainThreadException异常。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/42e71ff2ede7b5318104d20a53ead183.png"></p>    <p>在上面的代码中,类DownloadWebpageTask是类AsyncTask的一个子类,该类实现了AsyncTask的两个方法:</p>    <ul>     <li>doInBackground(): 执行方法 downloadUrl(),这个方法以 url为参数,该方法连接并取得网页内容,当它执行结束时,返回一个string字符串</li>     <li>onPostExecute(): 得到返回的string字符串,并显示在UI上</li>    </ul>    <h2>连接网络并得到数据</h2>    <p>在子线程中,通过 HttpURLConnection 的 get 方法创建对象,并通过 connect() 方法连接网络后,通过 getInputStream() 方法获得 输入流InputStream。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/40353908e57337c4a8b2ca61498cddfc.png"></p>    <p>注意,其中方法 getResponseCode() 返回连接的状态码,状态码可以有效的反应出连接的附加信息,比如:200表示网络连接成功。</p>    <h2>将输入流InputStream转化为字符串String</h2>    <p>下载后得到的输入流是byte流,得到输入流后,可以将它转化为可读的目标数据,比如图像、文字等。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/e4319863bcbed494fd9d64fd77a61b9f.png"></p>    <p>在上面的例子中,我们要得到的是字符串,所以这个方法用于将输入流转化为字符串后显示在UI上。</p>    <h2>Json解析</h2>    <p>Json是一种文本形式的数据交换格式,比XML更轻量,比二进制更容易阅读和编写,调用也更方便。这个例子中从网页得到的数据为Json字符串,接下来要进行的就是解析,Android提供了四个不同的类来解析Json数据,分别为JSONArray、JSONObject、JSONString 和 JSONTokenizer。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/b4904121ec60cd80be8bfb92d8a0e6fc.png"></p>    <p>Json的解析非常重要,解析和生成方式很多,上面的例子所用的是自带最基本的类进行的解析,但我们还可以用一些框架来提高效率,常用的类库有:JSON-Java、Gson、Jackson、FastJson等。</p>    <h2>我的Demo</h2>    <p>这里的demo要演示的是:在编辑框中输入要连接的网址url,点击按钮connect,与网站连接并获取数据,将取得的数据以字符串形式显示在下面,最后进行json解析,分别显示key值对应的value值。代码在我的github上,点击 <a href="/misc/goto?guid=4959733168290732405" rel="nofollow,noindex">这里查看</a></p>    <p><img src="https://simg.open-open.com/show/4e00477dcf2dc09f62daf483ce015636.png"></p>    <h2>参考资料</h2>    <p><a href="/misc/goto?guid=4959733168381345170" rel="nofollow,noindex">Connecting to the Network</a></p>    <p><a href="/misc/goto?guid=4959733168463979839" rel="nofollow,noindex">Android - JSON Parser</a></p>    <p> </p>    <p>来自:http://www.jianshu.com/p/3b1303941c0e</p>    <p> </p>