学习日志14

学习目标:

1.volley框架学习
2.了解xml

学习内容:

1.创建一个新的项目,在activity_mian.xml中写入

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background"
    android:orientation="vertical"
    android:padding="20dp">

    <EditText
        android:id="@+id/edtImageUrl"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/input_image_url"
        android:textSize="20sp"
        android:lines="2" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:gravity="center"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btnDownload"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="doDownload"
            android:textSize="20sp"
            android:text="@string/download" />

        <Button
            android:id="@+id/btnClear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="doClear"
            android:textSize="20sp"
            android:text="@string/clear" />
    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#bbbbbb" />

    <ScrollView
        android:id="@+id/svContent"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/ivImage"/>


    </ScrollView>
</LinearLayout>

添加volley依赖
在这里插入图片描述
在清单文件中写入访问权限
在这里插入图片描述
2.在主方法中写入

package com.example.myapplication;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.Volley;
public class MainActivity extends AppCompatActivity {

    private EditText edtImageUrl; // 网址编辑框
    private ImageView ivImage; // 显示网络图片的图像控件
    private RequestQueue mRequestQueue; // 请求队列

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 利用布局资源文件设置用户界面
        setContentView(R.layout.activity_main);

        // 通过资源标识符获取控件实例
        edtImageUrl = findViewById(R.id.edtImageUrl);
        ivImage = findViewById(R.id.ivImage);

        // 创建请求队列
        mRequestQueue = Volley.newRequestQueue(getApplicationContext());
    }

    /**
     * 下载按钮单击事件处理方法
     *
     * @param view
     */
    public void doDownload(View view) {
        // 获取用户输入的网址
        String strImageUrl = edtImageUrl.getText().toString();
        // 网址非空校验
        if (strImageUrl.length() == 0) {
            Toast.makeText(getApplicationContext(), "请输入网址", Toast.LENGTH_SHORT).show();
            edtImageUrl.requestFocus();
            return;
        }

        // 创建图像请求对象
        final ImageRequest imageRequest = new ImageRequest(
                strImageUrl, // 参数1:目标服务器的URL地址
                new Response.Listener<Bitmap>() { // 参数2:服务器响应成功的回调
                    @Override
                    public void onResponse(Bitmap response) {
                        ivImage.setImageBitmap(response);
                    }
                },
                0, // 参数3:指定允许图片最大的宽度(指定成0,不压缩图片)
                0, // 参数4:指定允许图片最大的高度(指定成0,不压缩图片)
                Bitmap.Config.RGB_565, // 参数5:指定图片颜色属性(RGB_565表示每个图片像素占据2个字节)
                new Response.ErrorListener() { // 参数6:服务器响应失败的回调
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(MainActivity.this, "服务器响应失败!", Toast.LENGTH_SHORT).show();
                    }
                });

        // 添加图像请求到请求队列
        mRequestQueue.add(imageRequest);
    }

    /**
     * 清空单击事件处理方法
     *
     * @param view
     */
    public void doClear(View view) {
        // 清空网址编辑框
        edtImageUrl.setText("");
        // 清空图像控件内容
        ivImage.setImageBitmap(null);
        // 让网址编辑框获取焦点
        edtImageUrl.requestFocus();
    }
}

找到一个图片网址,在手机中输入网址,并下载图片
在这里插入图片描述
我们也可以使用ImageLoader来下载网络图片

package com.example.myapplication;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.LruCache;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;


public class MainActivity extends AppCompatActivity {

    private EditText edtImageUrl; // 网址编辑框
    private ImageView ivImage; // 显示网络图片的图像控件
    private RequestQueue mRequestQueue; // 请求队列
    private ImageLoader imageLoader; // 图像加载器
    private ImageLoader.ImageListener imageListener; // 图像监听器

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 利用布局资源文件设置用户界面
        setContentView(R.layout.activity_main);

        // 通过资源标识符获取控件实例
        edtImageUrl = findViewById(R.id.edtImageUrl);
        ivImage = findViewById(R.id.ivImage);

        // 创建请求队列
        mRequestQueue = Volley.newRequestQueue(getApplicationContext());
    }

    /**
     * 下载按钮单击事件处理方法
     *
     * @param view
     */
    public void doDownload(View view) {
        // 获取用户输入的网址
        String strImageUrl = edtImageUrl.getText().toString();
        // 网址非空校验
        if (strImageUrl.length() == 0) {
            Toast.makeText(getApplicationContext(), "请输入网址", Toast.LENGTH_SHORT).show();
            edtImageUrl.requestFocus();
            return;
        }
        // 创建图像加载器对象
        imageLoader = new ImageLoader(mRequestQueue, new BitmapCache());
        // 获取图像监听器对象
        imageListener = imageLoader.getImageListener(
                ivImage, // 参数1:指定用于显示图片的ImageView控件
                R.drawable.ic_launcher_background, // 参数2:指定图片加载过程中显示的图片
                android.R.drawable.ic_delete // 参数3:指定图片加载失败时显示的图片
        );
        // 加载网络图片
        imageLoader.get(strImageUrl, imageListener);
    }

    /**
     * 清空单击事件处理方法
     *
     * @param view
     */
    public void doClear(View view) {
        // 清空网址编辑框
        edtImageUrl.setText("");
        // 清空图像控件内容
        ivImage.setImageBitmap(null);
        // 让网址编辑框获取焦点
        edtImageUrl.requestFocus();
    }

    /**
     * 绘图缓存类
     */
    class BitmapCache implements ImageLoader.ImageCache {

        private LruCache<String, Bitmap> mCache;

        public BitmapCache() {
            int maxSize = 10 * 1024 * 1024;
            mCache = new LruCache<String, Bitmap>(maxSize) {
                @Override
                protected int sizeOf(String key, Bitmap bitmap) {
                    return bitmap.getRowBytes() * bitmap.getHeight();
                }
            };
        }

        @Override
        public Bitmap getBitmap(String url) {
            return mCache.get(url);
        }

        @Override
        public void putBitmap(String url, Bitmap bitmap) {
            mCache.put(url, bitmap);
        }
    }
}


后面都是一样的操作就不说了,我们开始了解xml吧
1.xml简介

XML数据全名叫做可拓展标记语言,类似于HTML。在很多时候我们将xml用来储存数据,可以将其看作一个微型的数据库,比如我们Android中的SharedPreference就是使用XML文件来保存配置信息的,而我们的SQLite的底层也是一个xml文件;而在网络应用方面通常作为信息的载体,我们通常把数据包装成xml来传递

2.xml的三种方式
2.1 sax解析

对文档进行顺序扫描,当扫描到文档(document)开始与结束,元素(element)开始与结束,文档(document)结束等地方时,通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。解析速度快,占用内存也较少,每需要解析一类xml就需要编写新的适合该类XML的处理类。

2.2DOM解析

先把 XML文档都读到内存中,然后再有DOM
API来访问树形结构并获取数据。这个写起来很简单,但是很消耗内存,加入读取的数据量大,手机内存不够的话可能导致手机死机,不建议在安卓设备中使用解析,简单的XML文件到可以。
常用的五个接口与类:Document,Element,Node,NodeList,DOMParser
DOM是整个文件解析到内存中,供用户需要的节点信息,支持随机访问。
2.3pull解析
XML
pull提供了开始元素和结束元素。当某个元素开始时,我们调用parser.nextText0从XML文档中提取所有字符数据,当解释到一个文档结束时,自动生成EndDocument。常用接口和类:XmlPullParser,XmlSreializer,XmlPullParserFactory
和sax差不多,代码没那么实现较为简单,非常适合移动设备,安卓系统内置pull解析器,而且安卓系统内部默认使用pull来解析XML文件。如果需要在Jay2EE或者其他使用pull需要导入两个包,后面给出下载。
今天的了解到此为止,明天去了解,json数据分析。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值