我的第一个Volley程序遇到的坑

最近公司OA网站要改版,需要做个APP出来。所以开始学习APP开发,先从安卓学起,因为各方面成本比较低。

OA功能需要上传图片和附件,所以先看了安卓网络传输相关的内容。起初找了个用 HttpURLConnection 类写的程序,运行之后不太顺畅,没跑成功,报了很多错。大概有以下几种:

  1. 网络连接异常报错,经查,安卓4.0之后,为了考虑到易用性,安卓不再允许在主线程中做类似网络请求之类的耗时操作。后来增加了严格模式(StrictMode)来处理,但是感觉不太靠谱。
  2. 程序在读取图片时,总是报错 java.io.FileNotFoundException, permission denied,后来发现是读取权限没加,于是在Manifest.xml中增加权限。
  3. 继续调试,后来又报错 java.net.ProtocalException:method dose not support a rquest body:GET. 可我明明用的是post方法嘛
conn.setRequestMethod("POST");

找不出原因了。。。翻了翻资料,发现了Volley这个网络框架。


一、初识Volley

看网上的介绍说,Volley是一个Andorid开发团队在2013年推出了一个新的网络通信框架,大概有以下优点:

1 先说HTTP的用法太复杂,如果不进行封装,会造成重复代码 且不易使用;
2 既可以进行简单的HTTP通信,也可以加载网络上的图片;
3 性能方面表现还不错,尤其适用数据量不大但通信频繁的场景;
4 简单易用;


二、Volley配置与使用

  1. 在网上下载了Volley.jar包,拷贝到app\libs文件夹下,右键–add as library,

     just like this:
    

这里写图片描述

  1. 配置完jar包之后,还需要三步才能使用Volley。
RequestQueue queue= Volley.newRequestQueue(this);//step 1
        StringRequest request=new StringRequest("https://www.baidu.com/", new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {
                Log.d("success",s);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {

            }
        });//step 2
        queue.add(request);//step 3
step1. 创建用来执行请求的请求队列;
step2. 构建一个请求对象;
step3. 将请求对象加到请求队列里;

3.三步走走完之后,开始运行程序。

我的代码是这样的:

MainActivity.java

package com.example.huangs.myvolley;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        System.out.println("dddddddddddddddddd");
        setContentView(R.layout.activity_main);
        Log.i("ssss","ssss");
        getStringRequest();
    }

    private void getStringRequest() {
        //String url="http://10.10.71.66:8080/TestProject/DataReceiveServlet";
        String url="https://www.baidu.com/";
        RequestQueue queue= Volley.newRequestQueue(this);
        StringRequest request=new StringRequest("https://www.baidu.com/", new Response.Listener<String>() {
            @Override
            public void onResponse(String s) {
                Log.d("success",s);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {

            }
        });
        queue.add(request);
    }
}

Activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.huangs.myvolley.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>


三、遇到的那些坑

运行之后,程序除了显示HelloWorld的界面,控制台没有看到我在程序里打印的输出。也就是我的

System.out.println("dddddddddddddddddd");
Log.d("success",s);

这些都没打印出来。
后来查了好多资料,发现重启Andorid Studio 是最好使的@

重启之后,但是控制台报错

没有网络权限?可是我明明加了呀。

经过检查, 加错地方了。

注意:

<uses-permission android:name="android.permission.INTERNET" />

是和application标签一个层次的。


四、 大功告成

经过这一顿折腾,我的第一个Volley程序终于跑成功了。https://www.baidu.com/ 给返回了内容。

这里写图片描述

这里写图片描述

这只是最基本的Get请求,后续继续研究上传图片等复杂的POST请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷风在北京

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值