Android网络编程

      • 加载网络图片
      • 访问网络数据
      • json
      • WebView 网页加载控件

安卓与互联网交互的三种方式:

加载网络图片

例子:加载一张网络图片到ImageView上。
https://03imgmini.eastday.com//mobile//20201218//20201218133813_362200891ebb137183288595c85eabf5_2_mwpm_03200403.jpg

程序要使用一些特殊的功能(如网络连接),需要在清单文件中添加相关的权限。

<uses-permission android:name="android.permission.INTERNET"/>
public class MainActivity extends Activity {             //图片连接    private String mUrl = "https://03imgmini.eastday.com//mobile//20201218//20201218133813_362200891ebb137183288595c85eabf5_2_mwpm_03200403.jpg";    //图片显示控件    private ImageView mImageView;       @Override    protected void onCreate(Bundle savedInstanceState) {             super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);           mImageView = (ImageView) findViewById(R.id.image_view);                //调用图片加载函数        loadNetImage(mUrl, mImageView);    }      /**     * 用于加载某个网络图片到图片显示控件上     * @param url 网络图片的地址     * @param view 要加载图片图片的控件     */    public void loadNetImage(final String url,ImageView view) {             new Thread() {                 public void run() {                                     //此处临时中转一下?                String urlTemp = url;                                try {                         //转换成标准连接格式类的对象                    URL url = new URL(urlTemp);                    //创建网络连接对象                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();                    //获得Http状态码                    int httpCode = conn.getResponseCode();                    //如果成功了再执行下一步                    if(httpCode == 200) {                             //通过连接对象获得输入流数据                        InputStream is = conn.getInputStream();                        //TODO 可以保存在本地了                                                                       //将输入流转换为Bitmap对象                        final Bitmap bitmap = BitmapFactory.decodeStream(is);                                                //切换到主线程中去设置图片显示                        runOnUiThread(new Runnable() {                                 public void run() {                                     mImageView.setImageBitmap(bitmap);                            }                        });                                                //关闭流                        is.close();                    }else {                             Log.d("NetImage", "httpCode is not 200,is "+httpCode);                    }                } catch (MalformedURLException e) {                         e.printStackTrace();                    Log.d("NetImage", e.toString());                } catch (IOException e) {                         e.printStackTrace();                    Log.d("NetImage", e.toString());                }            }        }.start();    }}

访问网络数据

接口由三部分组成:(数据来自聚合数据平台API)
http://v.juhe.cn/toutiao/index
?
type=tiyu
&
key=5465c4c5d60f72c3d756a9f1a9b8437d

public class MainActivity extends Activity {         @Override    protected void onCreate(Bundle savedInstanceState) {             super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                getData();    }    /**     * 访问服务器,并获得服务器返回的API数据     */    private void getData() {             new Thread() {                 public void run() {                     String site = "http://v.juhe.cn/toutiao/index?type=tiyu&key=5465c4c5d60f72c3d756a9f1a9b8437d";                try {                         URL url = new URL(site);                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();                    int httpCode = conn.getResponseCode();                    if (httpCode == 200) {                             // 字节输入流                        InputStream is = conn.getInputStream();                        // 字节流→字符流                        InputStreamReader isr = new InputStreamReader(is);                        // 转换为缓冲流提高效率                        BufferedReader br = new BufferedReader(isr);                        // "水盆"                        String buffer = new String();                        // 存储已经读取的字符                        String readStr = new String();                        // 循环读取                        while ((buffer = br.readLine()) != null) {                                 // 将刚读取的字符串拼接到之前读取的字符串上                            readStr += buffer;                        }                        // 关闭流                        br.close();                        isr.close();                        is.close();                        Log.d("MainActivity", readStr);                    } else {                             Log.d("MainActivity", "http code is not 200,is " + httpCode);                    }                } catch (MalformedURLException e) {                         Log.d("MainActivity", e.toString());                } catch (IOException e) {                         Log.d("MainActivity", e.toString());                }            }        }.start();    }}

json

服务器返回的一对字符串实际上是JSON格式的。
格式(逐级嵌套):
{}表示的是JSONObject对象,内部是键值对
[]表示的是JSONArray对象,即JSONObject数组。

每条新闻包含的内容:
uniquekey ----每条新闻一个唯一识别码
title(必用) -----新闻标题
date -----新闻时间
category -----新闻类别
author_name -----新闻作者
url -----新闻连接
thumbnail_pic_s -----新闻图片

//解析JSON数据JSONObject object = new JSONObject(readStr);JSONObject result = object.getJSONObject("result");JSONArray data = result.getJSONArray("data"); //拿到新闻数组for(int i = 0;i<data.length();i++) {      //遍历新闻数组JSONObject item = data.getJSONObject(i); //获得第i个新闻对象//解析新闻的内容String link = item.getString("url");String title = item.getString("title");//TODO 如果有一个ArrayList,那么可以把新闻内容解析后添加进去,这样就可以使用MVP模式加载滑动列表了 //补充:跨线程使用List,有比ArrayList还好用的类型Vector //Vector用法跟ArrayList完全一样,区别在于多线程的优化更好。                            Log.d("MainActivity", title);Log.d("MainActivity", link);Log.d("MainActivity", " ");}

使用Android给我们提供的扣脚Json解析类果然要慢慢扣,当然你也可以将解析的过程 反过来,自己拼接JSON,时间关系,这里就慢慢拼接了,哈哈,当然进阶部分我们 学习了第三方的一些Json解析库就轻松多了。

WebView 网页加载控件

专用于HTTP网页加载。

public class MainActivity extends Activity {             private WebView mWebView;        //进度条弹窗    private ProgressDialog mDialog;    @Override    protected void onCreate(Bundle savedInstanceState) {             super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                mDialog = new ProgressDialog(MainActivity.this);        mDialog.setTitle("科大头条");        mDialog.setMessage("正在加载中");                mWebView = (WebView) findViewById(R.id.web_view);        //1.设置使用自己的WebView作为主网页加载控件        //2.获得加载的不同状态的回调方法        mWebView.setWebViewClient(new WebViewClient() {                             //网络页面开始加载的回调            @Override            public void onPageStarted(WebView view, String url, Bitmap favicon) {                     super.onPageStarted(view, url, favicon);                mDialog.show(); //显示进度条            }                        //网络页面加载结束的回调            @Override            public void onPageFinished(WebView view, String url) {                     super.onPageFinished(view, url);                mDialog.dismiss(); //关闭进度条            }        });                //开启JS        mWebView.getSettings().setJavaScriptEnabled(true);        //加载网页        mWebView.loadUrl("https://mini.eastday.com//a//201218141503193.html?qid=juheshuju&referrer=");    }}

更多相关文章

  1. ImageView的android:scaleType属性和 src、Background之前的区别
  2. (4.1.22.2)Android之取消ViewPage+Fragment的预加载 2015
  3. Android中用webView引用js
  4. android 程序中选择图片的代码
  5. 常用方法(1)------根据图片的url路径获得Bitmap对象
  6. Android(安卓)BaseFragment封装
  7. android 根据图片的URI获取对应的图片
  8. 3D相册图片滑动+倾斜+放大+倒影处理
  9. Android通过相机拍照后无法获取URI问题解决

随机推荐

  1. Android(安卓)面试文档分享
  2. Android中使用Retrofit刷新Token
  3. 4款最好的Android设备HTML编辑器
  4. [转]android解决apk编译方法数超过64k的
  5. Android:native和上层framework基于socke
  6. H264解码器源码(Android(安卓)1.6 版)
  7. Android查看数据库方法及工具
  8. 线程方法Android:异步调用详解
  9. 在Android里显示网页的多种方式
  10. Android(安卓)OpenGL ES 绘图 -- 基础元