安卓网络通信与服务访问网络上的图片

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);
        
    

预览效果如下:

以上是关于安卓网络通信与服务访问网络上的图片的主要内容,如果未能解决你的问题,请参考以下文章

NFS网络文件共享

NFS共享存储服务

安卓模拟器为啥没网络,谁知道?

NFS共享存储服务

android 安卓异步加载网络图片,与viewpager结合使用示例

多节点Tomcat利用NFS服务实现目录共享