day13_安卓中常见的网络请求方式

本文介绍了安卓中常见的网络请求方式,包括HttpUrlConnection的GET和POST请求,以及HTTP协议的基本概念和请求响应协议。此外,还提到了Fiddler和Postman作为测试工具的作用。同时,文章讨论了滚动歌词效果和断点续传技术的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安卓中常见的网络请求方式

HttpUrlConnection
1.get请求
2.post请求
3.下载网络视频/音乐/图片到SD卡中

一.概念:
1.http:超文本传输协议(客户端和服务端),应用层协议
2.html:超文本标记语言
3.xml:可扩展标记语言
二.网络七层
应用层:http
表示层:将人看的懂的转成计算器
会话层:发起会话
传输层:tcp协议+udp协议
网络层:ip协议
数据链路层:
物理层:网线
三.http协议:请求协议+响应协议
1.请求协议:客户端向服务端发送的
(1)请求首行:请求方式+地址+版本号
(2)请求头信息:客户端告诉服务端自己的一些信息
(3)空行
(4)请求体:客户端向服务端发送的数据(get请求没有请求体,post请求有请求)
2.响应协议:服务端给客户端响应的
(1)响应首行:版本号+响应码+响应信息
(2)响应头信息:服务器告诉客户端的信息 Content-Length: 4772
(3)空行
(4)响应体:服务器返回给客户端的内容(图片 json xml)
四.2个软件:
fiddler:抓包用的,能够获取http请求协议和响应协议内容
postman:测接口用的,每次直接在这个软件上面测接口
五.技能点:使用httpurlConnection做get请求和post请求
1.get和post的区别:
get将发送的数据暴露在url,不安全的+主要应用向服务器要数据
post将发送的数据放在请求体,安全的+主要应用向服务器提交数据
2.get:下载文件+请求图片+请求json
3.post:登陆+注册+上传文件
六.八种请求方式,常用的get和post
1、OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
2、HEAD
向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
3、GET
向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。
4、POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。
5、PUT
向指定资源位置上传其最新内容
6、DELETE
请求服务器删除Request-URL所标识的资源
7、TRACE
回显服务器收到的请求,主要用于测试或诊断
8、CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
七.常用响应码:1xx 消息 2xx 成功 3xx重定向 4xx客户端错误 5xx服务器

滚动歌词效果

在这里插入图片描述

//主类
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback{
    File file = new File("/sdcard/Misc/春风十里");
    File file1=new File("/sdcard/Misc/前冲 - 春风十里.mp3");
    SurfaceView surfaceView;
    SurfaceHolder surfaceHolder;
    SeekBar seekBar;
    MediaPlayer mediaPlayer;
    Timer timer;
    int positon=0;
    TextView textView1,textView2;
    ArrayList<Music> list=new ArrayList<>();
    @SuppressLint("HandlerLeak")
    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what==101){
                if (mediaPlayer!=null){
                    int duration = mediaPlayer.getDuration();
                    int currentPosition = mediaPlayer.getCurrentPosition();
                    Date date=new Date(duration);
                    SimpleDateFormat sdf=new SimpleDateFormat("mm:ss");
                    String format = sdf.format(date);
                    seekBar.setMax(duration);
                    seekBar.setProgress(currentPosition);
                    textView2.setText(format);
                    Date date1=new Date(currentPosition);
                    String format1 = sdf.format(date1);
                    textView1.setText(format1);

                    if (list.size()>0){
                        if (positon<list.size()-1){
                            if (currentPosition>=list.get(positon+1).getTime()){
                                positon++;
                            }
                        }
                    }

                    if (positon-1>0){
                        if (currentPosition<=list.get(positon).getTime()){
                            positon--;
                        }
                    }

                }
            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        surfaceView=findViewById(R.id.surf);
        seekBar=findViewById(R.id.seekbar);
        textView1=findViewById(R.id.tv1);
        textView2=findViewById(R.id.tv2);

        timer=new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                handler.sendEmptyMessage(101);
            }
        },0,1);

       mediaPlayer= new MediaPlayer();
        try {
            mediaPlayer.reset();
            mediaPlayer.setDataSource(file1.getPath());
            mediaPlayer.prepare();
            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mediaPlayer.start();
                }
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { }
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) { }
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                int progress = seekBar.getProgress();
                mediaPlayer.seekTo(progress);
            }
        });

        StringBuffer stringBuffer=new StringBuffer();
        try {
            FileInputStream fileInputStream=new FileInputStream(file);
            byte[] bytes=new byte[1024];
            int len=0;
            while ((len=fileInputStream.read(bytes))!=-1){
                stringBuffer.append(new String(bytes,0,len));
            }
            Gson gson=new Gson();
            Bean bean = gson.fromJson(stringBuffer.toString(), Bean.class);
            Bean.LrcBean lrc = bean.getLrc();
            String lyric = lrc.getLyric();
            String[] split = lyric.split("\n");
            for (int i = 0; i < split.length; i++) {
//                Log.e("###",split[i]+"");
                String trim = split[i].trim();
                String[] split1 = trim.split("]");
                if(split1.length>=2){
                    String s = split1[0];
                    String substring1 = s.substring(1, 3);
                    String substring2 = s.substring(4, 6);
                    String substring3 = s.substring(7, 9);
//                    Log.e("###",substring1+":"+substring2+":"+substring3);
                    int start=Integer.parseInt(substring1)*60*1000+Integer.parseInt(substring2)*1000+Integer.parseInt(substring3);
                    String text = split1[1];
                    list.add(new Music(text, start));
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        for (int i = 0; i < list.size(); i++) {
            Log.e("###",list.get(i).toString());
        }

        surfaceHolder = surfaceView.getHolder();
        surfaceHolder.addCallback(this);

    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        new MyThread().start();
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {

    }
    int y=250;
    int x=150;
    class MyThread extends Thread{
        @Override
        public void run() {
            super.run();

            while(true){
                Paint paint=new Paint();
                paint.setColor(Color.BLACK);
                paint.setStrokeWidth(10);
                paint.setTextSize(30);
                Paint paint1=new Paint();
                paint1.setColor(Color.RED);
                paint1.setStrokeWidth(10);
                paint1.setTextSize(50);
                Canvas canvas = surfaceHolder.lockCanvas();
                if(canvas==null){
                    break;
                }
                canvas.drawColor(Color.WHITE);
                if (list.size()>0){
                    for (int i=positon-1;i>=0;i--){
                        canvas.drawText(list.get(i).getText(),x,y-50*(positon-i),paint);
                    }

                    canvas.drawText(list.get(positon).getText(),x,y,paint1);

                    for (int i=positon+1;i<list.size();i++){
                        canvas.drawText(list.get(i).getText(),x,y+50*(i-positon),paint);
                    }
                }

                surfaceHolder.unlockCanvasAndPost(canvas);
            }


        }
    }
}

//音乐类
public class Music {
    private String text;
    private int time;

    public Music(String text, int time) {
        this.text = text;
        this.time = time;
    }

    @Override
    public String toString() {
        return "Music{" +
                "text='" + text + '\'' +
                ", time=" + time +
                '}';
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public int getTime() {
        return time;
    }

    public void setTime(int time) {
        this.time = time;
    }
}
//解析的Bean类
public class Bean {
    private boolean sgc;
    private boolean sfy;
    private boolean qfy;
    private LyricUserBean lyricUser;
    private LrcBean lrc;
    private KlyricBean klyric;
    private TlyricBean tlyric;
    private int code;

    public boolean isSgc() {
        return sgc;
    }

    public void setSgc(boolean sgc) {
        this.sgc = sgc;
    }

    public boolean isSfy() {
        return sfy;
    }

    public void setSfy(boolean sfy) {
        this.sfy = sfy;
    }

    public boolean isQfy() {
        return qfy;
    }

    public void setQfy(boolean qfy) {
        this.qfy = qfy;
    }

    public LyricUserBean getLyricUser() {
        return lyricUser;
    }

    public void setLyricUser(LyricUserBean lyricUser) {
        this.lyricUser = lyricUser;
    }

    public LrcBean getLrc() {
        return lrc;
    }

    public void setLrc(LrcBean lrc) {
        this.lrc = lrc;
    }

    public KlyricBean getKlyric() {
        return klyric;
    }

    public void setKlyric(KlyricBean klyric) {
        this.klyric = klyric;
    }

    public TlyricBean getTlyric() {
        return tlyric;
    }

    public void setTlyric(TlyricBean tlyric) {
        this.tlyric = tlyric;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public static class LyricUserBean {

        private int id;
        private int status;
        private int demand;
        private int userid;
        private String nickname;
        private long uptime;

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public int getStatus() {
            return status;
        }

        public void setStatus(int status) {
            this.status = status;
        }

        public int getDemand() {
            return demand;
        }

        public void setDemand(int demand) {
            this.demand = demand;
        }

        public int getUserid() {
            return userid;
        }

        public void setUserid(int userid) {
            this.userid = userid;
        }

        public String getNickname() {
            return nickname;
        }

        public void setNickname(String nickname) {
            this.nickname = nickname;
        }

        public long getUptime() {
            return uptime;
        }

        public void setUptime(long uptime) {
            this.uptime = uptime;
        }
    }

    public static class LrcBean {
      
        private int version;
        private String lyric;

        public int getVersion() {
            return version;
        }

        public void setVersion(int version) {
            this.version = version;
        }

        public String getLyric() {
            return lyric;
        }

        public void setLyric(String lyric) {
            this.lyric = lyric;
        }
    }

    public static class KlyricBean {
        /**
         * version : 0
         * lyric : null
         */

        private int version;
        private Object lyric;

        public int getVersion() {
            return version;
        }

        public void setVersion(int version) {
            this.version = version;
        }

        public Object getLyric() {
            return lyric;
        }

        public void setLyric(Object lyric) {
            this.lyric = lyric;
        }
    }

    public static class TlyricBean {
        /**
         * version : 0
         * lyric : null
         */

        private int version;
        private Object lyric;

        public int getVersion() {
            return version;
        }

        public void setVersion(int version) {
            this.version = version;
        }

        public Object getLyric() {
            return lyric;
        }

        public void setLyric(Object lyric) {
            this.lyric = lyric;
        }
    }
}

断点续传效果

//主类
public class MainActivity extends AppCompatActivity {
    VideoView videoView;
    SeekBar seekBar;
    Button button;
    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what==102){
                videoView.setVideoPath("/sdcard/Misc/a.mp4");
                videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        videoView.start();
                    }
                });
            }else if (msg.what==103){
                videoView.setVideoPath("/sdcard/Misc/a.mp4");
                videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        videoView.start();
                    }
                });
            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        videoView=findViewById(R.id.vv);
        seekBar=findViewById(R.id.seek);
        button=findViewById(R.id.sta);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new MyGetThread("http://uvideo.spriteapp.cn/video/2019/0719/cc6b8cea-a97a-11e9-a3f8-90b11c479401_wpd.mp4",MainActivity.this,seekBar).start();
            }
        });


    }
}

//线程
public class MyGetThread extends Thread{
    private String url_str;
    private MainActivity activity;
    private SeekBar seekBar;
    int start;
    int end;
    int count=0;
    File file =new File("/sdcard/Misc/a.mp4");
    public MyGetThread(String url_str, MainActivity activity,SeekBar seekBar) {
        this.url_str = url_str;
        this.activity = activity;
        this.seekBar = seekBar;
    }

    @Override
    public void run() {
        super.run();
        try {
            URL url=new URL(url_str);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("GET");
            urlConnection.connect();
            if (urlConnection.getResponseCode()==200){
                int contentLength = urlConnection.getContentLength();
                end=contentLength;
                seekBar.setMax(contentLength);
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


        try {
            URL url2=new URL(url_str);
            HttpURLConnection urlConnection2 = (HttpURLConnection) url2.openConnection();
            if (file.exists()){
                start= (int) file.length();
                count+=start;
                if (start==end){
                    activity.handler.sendEmptyMessage(102);
                }
            }
            urlConnection2.setRequestProperty("Range","bytes="+start+"-"+end);
            if (urlConnection2.getResponseCode()==206){
                InputStream inputStream = urlConnection2.getInputStream();
                RandomAccessFile randomAccessFile=new RandomAccessFile(file,"rw");
                randomAccessFile.seek(start);
                byte[] bytes=new byte[1024];
                int len=0;
                while((len=inputStream.read(bytes))!=-1){
                    count+=len;
                    randomAccessFile.write(bytes,0,len);
                    seekBar.setProgress(count);
                    if (count==end){
                        activity.handler.sendEmptyMessage(103);
                    }
                }
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值