安卓网络通信与服务访问网络上的图片
Posted tea_year
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓网络通信与服务访问网络上的图片相关的知识,希望对你有一定的参考价值。
网络通信与服务
1.web服务器简介
web:www,world wide web。服务器,主要有如下几类:
IIS:Internet Informatioin Services缩写,是微软公司出品的服务器产品,主要解析的是微信开发多一些编程语言,例如asp.net等。
apache:开源的,主要是web服务
tomcat:apace子项目,主要是java语言,这个就不再讲了,将来我们的服务器交互以java的服务器交互为主。
2.HTTP简介
超文本传输协议,浏览器与web服务器交互的应用层通信协议。
3.get/post请求
get:请求一把是通过url来访问资源,用的是明文的方式,基本都是?参数名=值格式,这个有大小限制。
post请求:是用于表单向服务器提交信息,这个大小不限。
4.通过HTTP访问网络(安卓)
1.HttpURLConnection
继承自URLConnection抽象类,无法直接实例化对象,必须通过openCollection()来获取对象实例。可以通过get和post请求来获取的和服务器http请求和响应。
//1.创建URL对象
URL urlConn=new URL(网址) //可以是外网http://www.163.com 也可以是内网 http://localhost
//2.获取HttpURLConnection对象
HttpURLConnection urlConn=(HttpURLConnection)url.openConnection(); //强转
//3.调用getInputStream()方法获取服务器返回的输入流
InputStream in=conn.getInputStream();
//4.读取并处理(解码)服务器返回的输入流
bitmap =BitmapFactory.decodeStream(is);
//5.关闭连接
urlConn.disconnect();
6.案例
6.1 设计界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android">
<!--组件 -->
<TextView
android:layout_width="wrap_content" android:id="@+id/textView1"
android:layout_height="wrap_content" android:text="下载一个图片"/>
<ImageView
android:layout_width="wrap_content" android:id="@+id/imageView1"
android:layout_height="wrap_content"/>
<Button
android:layout_width="wrap_content" android:id="@+id/button1"
android:layout_height="wrap_content" android:text="开始下载"/>
</LinearLayout>
6.2 后台代码
package com.aaa.httpurldemo;
import androidx.appcompat.app.AppCompatActivity;
import androidx.loader.content.AsyncTaskLoader;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class MainActivity extends AppCompatActivity
//1.定义相应的对象;都是空,好处是需要的时候给他们赋值,节省内存空间;
Button visitWebBtn=null;
Button button1=null;
TextView textView1=null;
ImageView imageView1=null;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//---------------------
// 2.获取对象;
imageView1=(ImageView) findViewById(R.id.imageView1);
button1=(Button) findViewById(R.id.button1);
//3.创建下载图片按钮的事件监听;
button1.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
//定义一个url,图片地址;
String imgUrl;
imgUrl="https://img-blog.csdnimg.cn/2ca5b2d594b7464d832713fc3c481b75.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAdGVhX3llYXI=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center";
//也可以自建本地的url地址;
//imgUrl="http://192.168.1.1:8080/java.jpg"
new DownImageAsyncTask().execute(imgUrl);
);
//从指定的URL来获取图片;可以实现绘图操作
private Bitmap getImageBitmap(String url) //url:传入的后台地址;
URL imgUrl=null; // 一个是url地址;
Bitmap bitmap=null; //返回的图像对象;
//下面这里是核心代码;
try
//1.创建url对象,
imgUrl=new URL(url);
//2.获取HttpURLConnection对象实例;
HttpURLConnection conn=(HttpURLConnection) imgUrl.openConnection();
conn.setDoInput(true);
conn.connect(); //开始连接;
//3.获取服务器返回的数据流;
InputStream is=conn.getInputStream();
//4.解码数据流;
bitmap= BitmapFactory.decodeStream(is); //解码输入字节流
is.close(); //关闭输入流对象;
//5.断开连接;
conn.disconnect();
catch (MalformedURLException e) //URL地址异常,没找到地址;
// e.printStackTrace();
Toast.makeText(this, "图片下载失败,请确定地址是否正确", Toast.LENGTH_SHORT).show();
catch (IOException e)
// e.printStackTrace();
Toast.makeText(this,"图片下载失败,请确定网络服务是否正常",Toast.LENGTH_LONG).show();
return bitmap;
//利用异步任务机制来下载图片;
public class DownImageAsyncTask extends AsyncTask<String, Void, Bitmap>
//下载之前,清空操作
@Override
protected void onPreExecute()
super.onPreExecute();
imageView1.setImageBitmap(null);
//这个是下载
@Override
protected Bitmap doInBackground(String... params)
Bitmap b=getImageBitmap(params[0]);//下载了一个图片,也可以同时下载多个,params[1],...,params[n]
return b;
//这个是结束
@Override
protected void onPostExecute(Bitmap result)
super.onPostExecute(result);
if(result!=null)
imageView1.setImageBitmap(result);
预览效果如下:
以上是关于安卓网络通信与服务访问网络上的图片的主要内容,如果未能解决你的问题,请参考以下文章