目录
Android开发使用Java的API发起网络请求

使用Java的API发起网络请求

前面我们了解了Http协议

安卓网路编程-http协议

android应用是用java编写的,到framework层还是用java编写的,而android的网络请求,其实是对java的网络请求进行了封装。

在android6.0以前,有apache的HttpClient,使用简单,就像德芙那般丝滑!

但是

图片描述

所以,如果同学们以后打开别人的项目,报错,没有httpclient的时候

你就要记得,加上这个了

shell
复制代码
android {
    useLibrary 'org.apache.http.legacy'
}

好吧,推荐我们使用HttpURLConnection,我们就看看吧,

这是官方的文档地址:

HttpUrlConnection

所以我们先看看java是如何进行网络请求的。

Java的API文档在后面附录里

直接上代码吧:

java
复制代码
private static void loadData(String baseUrl, Map<String, String> params) {
        try {
            //拼接URL
            StringBuilder sb = new StringBuilder(baseUrl);
            if (params.size() > 0) {
                sb.append("?");
                Set<Map.Entry<String, String>> entries = params.entrySet();
                for (Map.Entry<String, String> entry : entries) {
                    sb.append(entry.getKey());
                    sb.append("=");
                    sb.append(entry.getValue());
                }
            }
            String resultUrl = sb.toString();
            URL url = new URL(resultUrl);
            //打开连接
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setRequestMethod("GET");
            //设置请求超时时间
            urlConnection.setConnectTimeout(1000);
            urlConnection.setRequestProperty("accept", "*/*");
            urlConnection.setRequestProperty("connection", "keep-alive");
            urlConnection.setRequestProperty("Accept-Language", "zh-CN,zh");

            //开始连接
            urlConnection.connect();
            //获取返回内容
            Map<String, List<String>> headerFields = urlConnection.getHeaderFields();
            Set<Map.Entry<String, List<String>>> entries = headerFields.entrySet();
            for (Map.Entry<String, List<String>> entry : entries) {
                System.out.println(entry.getKey() + " === " + entry.getValue());
            }
            InputStream inputStream = urlConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                System.out.println(line);
            }
            bufferedReader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

调用:

java
复制代码
    public static void main(String[] args) {
        Map<String, String> params = new HashMap<>();
        loadData("https://www.sunofbeach.net", params);
    }

运行结果:

图片描述

可以看到我们把网页的内容获取到了。

我们再获取一个json数据试试

java
复制代码
    public static void main(String[] args) {
        Map<String, String> params = new HashMap<>();
        //loadData("https://www.sunofbeach.net", params);

        //获取动态列表
        // https://www.sunofbeach.net/content/content/moment/list/1153952789488054272/1
        loadData("https://www.sunofbeach.net/content/content/moment/list/1153952789488054272/1", params);
    }

获取到的结果:

图片描述

复制出来,格式化一下

图片描述

你看,这数据不就回来了嘛!

我们先搞定请求先,然后转到android上,把数据请求回来,显示在UI上。

android上使用java的API请求数据

网络配置

声明网络权限,还是要滴

xml
复制代码
    <uses-permission android:name="android.permission.INTERNET" />

最近很多同学遇到网络请求的各种问题,权限配置了,还是无法发起请求。这个其实可以去看log,log会告诉你为什么不给你请求。

也有同学说在版本27的时候可以,到了29上就不可以了。

遇到这些问题怎么办呢?可以去看文档

Android各版本相关说明

在文档的左侧则是各个版本,每个版本的变更,有相关的说明。重点看应用行为变更。

比如说:Android8.0的应用行为变更

Android8.0的应用行为变更

图片描述

关于网络访问的版本差异,请同学们查看这篇文章

Android网络访问不同版本的差异,看完这篇文章你就茅厕顿开了

请求数据

请求的代码,我省略了一些请求头信息,直接就请求内容。

java
复制代码
package com.sunofbeaches.javanetdemo;


import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    public void startRequest(View view) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                loadData();
            }
        }).start();
    }

    private void loadData() {
        try {
            URL url = new URL("https://www.sunofbeach.net/content/content/moment/list/1153952789488054272/1");
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            int responseCode = httpURLConnection.getResponseCode();
            if(responseCode == 200) {
                httpURLConnection.setConnectTimeout(1000);
                InputStream inputStream = httpURLConnection.getInputStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
                String line;
                while((line = bufferedReader.readLine()) != null) {
                    Log.d(TAG,line);
                }
                bufferedReader.close();
            }
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

}

请求回来的数据

图片描述

再用Gson将结果格式化,用列表显示不在UI上。

数据请求回来显示在UI上

MainActivity代码如下:

java
复制代码
package com.sunofbeaches.javanetdemo;


import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;

import android.util.Log;
import android.view.View;

import com.google.gson.Gson;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    public static final int WHAT_LOADER_RESULT = 1;
    private static Handler mHandler;
    private RecyclerView mResultList;
    private ResultAdapter mResultAdapter;

    @SuppressLint("HandlerLeak")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                switch(msg.what) {
                    case WHAT_LOADER_RESULT:
                        MomentItem result = (MomentItem) msg.obj;
                        refreshResultList(result);
                        break;
                }
            }
        };
        initView();
    }

    private void initView() {
        mResultList = findViewById(R.id.result_list);
        mResultList.setLayoutManager(new LinearLayoutManager(this));
        mResultAdapter = new ResultAdapter();
        mResultList.setAdapter(mResultAdapter);
    }

    private void refreshResultList(MomentItem result) {
        Log.d(TAG,"refreshResultList -- ");
        mResultAdapter.setData(result);
    }


    public void startRequest(View view) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                loadData();
            }
        }).start();
    }

    private void loadData() {
        try {
            URL url = new URL("https://www.sunofbeach.net/content/content/moment/list/1153952789488054272/1");
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.setRequestMethod("GET");
            httpURLConnection.setConnectTimeout(1000);
            int responseCode = httpURLConnection.getResponseCode();
            if(responseCode == 200) {
                InputStream inputStream = httpURLConnection.getInputStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
                String line = bufferedReader.readLine();
                Log.d(TAG,"line -- > " + line);
                bufferedReader.close();
                Message message = mHandler.obtainMessage();
                message.what = WHAT_LOADER_RESULT;
                Gson gson = new Gson();
                message.obj = gson.fromJson(line,MomentItem.class);
                mHandler.sendMessage(message);
            }
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

}

bean类,通过GsonFormat自动生成,如果不会的同学可以去看一下AndroidStudio奇淫技巧课程,在学院里。

java
复制代码
package com.sunofbeaches.javanetdemo;

import java.util.List;

public class MomentItem {

    /**
     * success : true
     * code : 10000
     * message : 获取成功
     * data : {"content":[{"_id":"1200696538762956800","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":0,"commentCount":0,"url":"/a/1200681268338085888","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3iHb2AR2ktAABV8LFIYGU029.png|https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3iKCqAYWxCAAEp3Frp3bI477.png|https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3iAymAO-J8AABCRyG8suI326.png","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-30T08:42:17.361+0000","thumbList":[],"subTitle":"Android网络访问不同版本的差异,看完这篇文章你就茅厕顿开了。","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3iHb2AR2ktAABV8LFIYGU029.png","https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3iKCqAYWxCAAEp3Frp3bI477.png","https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3iAymAO-J8AABCRyG8suI326.png"]},{"_id":"1200362375161696256","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":0,"commentCount":0,"url":"/a/1200344514544390144","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3f5t2ARLGnAAJywvrFa84609.png","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-29T10:34:26.550+0000","thumbList":[],"subTitle":"Android开发学习路线","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3f5t2ARLGnAAJywvrFa84609.png"]},{"_id":"1200343023158939648","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":0,"commentCount":0,"url":"/a/1200314266318655488","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3g2IKAPYYnAAFxwyobdPA422.png","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-29T09:17:32.673+0000","thumbList":[],"subTitle":"Android初学者高频问题","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3g2IKAPYYnAAFxwyobdPA422.png"]},{"_id":"1200075606839119872","content":"我分享了以下内容,欢迎大家围观,起哄!","type":1,"thumbUpCount":0,"commentCount":0,"url":"/s/1200075011881291776","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3f6OyAHiCeAAE8PSq5KVE517.png","subContent":"这个对于写博客呀,提问题都很方面。可以帮助同学们去描述问题,描述现象,很轻量级,使用简单。有需要的同学,下载一个来使用吧。","subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-28T15:34:55.654+0000","thumbList":[],"subTitle":"非常轻量级的gif录制软件","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3f6OyAHiCeAAE8PSq5KVE517.png"]},{"_id":"1200074792489832448","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":0,"commentCount":0,"url":"/a/1200067479267823616","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3f5t2ARLGnAAJywvrFa84609.png","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-28T15:31:41.498+0000","thumbList":[],"subTitle":"作为一个聪明的程序员,应该如何提bug,提问呢?","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3f5t2ARLGnAAJywvrFa84609.png"]},{"_id":"1200001280555126784","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":0,"commentCount":0,"url":"/a/1198454553108926464","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aBTeAMWARAAAwdcN39nQ151.png","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-28T10:39:34.887+0000","thumbList":[],"subTitle":"AndroidStudio奇淫技巧-代码管理","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aBTeAMWARAAAwdcN39nQ151.png"]},{"_id":"1200001270300053504","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":0,"commentCount":0,"url":"/a/1198499103244406784","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aNt6ABIJGAAO1bKDnK6Q261.gif|https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aMa-ANr2vAAKdDqWFhqE991.gif|https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aL-OAVeSKAAG5wwEHQIc679.gif","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-28T10:39:32.442+0000","thumbList":[],"subTitle":"AndroidStudio奇淫技巧-编码","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aNt6ABIJGAAO1bKDnK6Q261.gif","https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aMa-ANr2vAAKdDqWFhqE991.gif","https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aL-OAVeSKAAG5wwEHQIc679.gif"]},{"_id":"1198877411572305920","content":"我分享了以下内容,欢迎大家围观,起哄!","type":1,"thumbUpCount":1,"commentCount":0,"url":"/s/1198876503853617152","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3bjL6AUyWaAANyjRtAQVU355.png","subContent":"Android Stduio插件下载地址,如果我们的AS下载不了插件,那么可以使用浏览器进行下载,然后再通过inastall from disk安装即可。","subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-25T08:13:43.641+0000","thumbList":["1185049561517850624"],"subTitle":"Android Stduio插件下载地址","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3bjL6AUyWaAANyjRtAQVU355.png"]},{"_id":"1198513486074859520","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":1,"commentCount":0,"url":"/a/1198499103244406784","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aNt6ABIJGAAO1bKDnK6Q261.gif|https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aMa-ANr2vAAKdDqWFhqE991.gif|https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aL-OAVeSKAAG5wwEHQIc679.gif","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-24T08:07:37.041+0000","thumbList":["1185049561517850624"],"subTitle":"AndroidStudio奇淫技巧-编码","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aNt6ABIJGAAO1bKDnK6Q261.gif","https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aMa-ANr2vAAKdDqWFhqE991.gif","https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aL-OAVeSKAAG5wwEHQIc679.gif"]},{"_id":"1198488984297263104","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":1,"commentCount":0,"url":"/a/1198454553108926464","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aBTeAMWARAAAwdcN39nQ151.png","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-24T06:30:15.362+0000","thumbList":["1185049561517850624"],"subTitle":"AndroidStudio奇淫技巧-代码管理","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aBTeAMWARAAAwdcN39nQ151.png"]},{"_id":"1198453675350151168","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":1,"commentCount":0,"url":"/a/1198435426919108608","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3Z_MOAcOQdAACHzLSqHmo192.png","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-24T04:09:57.053+0000","thumbList":["1185049561517850624"],"subTitle":"AndroidStudio奇淫技巧-项目导入","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3Z_MOAcOQdAACHzLSqHmo192.png"]},{"_id":"1198287706304663552","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":0,"commentCount":0,"url":"/a/1198146335145054208","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3Y-CKAE7R9AAAe0PNEIFo946.png|https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3Y73aAKnjNAAFT53qLkF0823.png|https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3Y7zuAK8w8AABGCZQRXZQ148.png","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-23T17:10:26.949+0000","thumbList":[],"subTitle":"AndroidStudio奇淫技巧-项目相关","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3Y-CKAE7R9AAAe0PNEIFo946.png","https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3Y73aAKnjNAAFT53qLkF0823.png","https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3Y7zuAK8w8AABGCZQRXZQ148.png"]},{"_id":"1198141967687602176","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":0,"commentCount":0,"url":"/a/1198120317357248512","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3YzXOAMJAkAAPJi1jU9Pc469.png","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-23T07:31:20.155+0000","thumbList":[],"subTitle":"AndroidStudio奇淫技巧IDE设置","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3YzXOAMJAkAAPJi1jU9Pc469.png"]},{"_id":"1197834129564094464","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":1,"commentCount":0,"url":"/a/1197731399965200384","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3XZvWAPn12AAEFRU3zoRY668.png|https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3Xb9SAaHGKAAAroyVN2_A756.png|https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3XeeaAXL8wAAIMLE7rEKc984.png","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-22T11:08:05.827+0000","thumbList":["1185049561517850624"],"subTitle":"安卓网路编程-http协议","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3XZvWAPn12AAEFRU3zoRY668.png","https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3Xb9SAaHGKAAAroyVN2_A756.png","https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3XeeaAXL8wAAIMLE7rEKc984.png"]},{"_id":"1197808497891332096","content":"我分享了以下内容,欢迎大家围观,起哄!","type":1,"thumbUpCount":1,"commentCount":0,"url":"/s/1197802791079366656","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3XqYmAW_ilAACgEEu-YtI030.png","subContent":"可以抓包,可以做测试,抓本地访问的,甚至可以抓手机访问的内容,但是手机要设置代理。后面再写一篇如何使用的文章吧。功能强大到用不完,你说呢,哈哈!","subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-22T09:26:14.760+0000","thumbList":["1185049561517850624"],"subTitle":"Fiddler抓包工具,墙裂推荐,功能很强大很全的一个工具","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3XqYmAW_ilAACgEEu-YtI030.png"]}],"pageable":{"sort":{"unsorted":false,"sorted":true},"pageSize":15,"pageNumber":0,"offset":0,"unpaged":false,"paged":true},"totalPages":9,"totalElements":131,"last":false,"first":true,"sort":{"unsorted":false,"sorted":true},"numberOfElements":15,"size":15,"number":0}
     */

    private boolean success;
    private int code;
    private String message;
    private DataBean data;

    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    public int getCode() {
        return code;
    }

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

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public DataBean getData() {
        return data;
    }

    public void setData(DataBean data) {
        this.data = data;
    }

    public static class DataBean {
        /**
         * content : [{"_id":"1200696538762956800","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":0,"commentCount":0,"url":"/a/1200681268338085888","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3iHb2AR2ktAABV8LFIYGU029.png|https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3iKCqAYWxCAAEp3Frp3bI477.png|https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3iAymAO-J8AABCRyG8suI326.png","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-30T08:42:17.361+0000","thumbList":[],"subTitle":"Android网络访问不同版本的差异,看完这篇文章你就茅厕顿开了。","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3iHb2AR2ktAABV8LFIYGU029.png","https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3iKCqAYWxCAAEp3Frp3bI477.png","https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3iAymAO-J8AABCRyG8suI326.png"]},{"_id":"1200362375161696256","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":0,"commentCount":0,"url":"/a/1200344514544390144","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3f5t2ARLGnAAJywvrFa84609.png","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-29T10:34:26.550+0000","thumbList":[],"subTitle":"Android开发学习路线","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3f5t2ARLGnAAJywvrFa84609.png"]},{"_id":"1200343023158939648","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":0,"commentCount":0,"url":"/a/1200314266318655488","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3g2IKAPYYnAAFxwyobdPA422.png","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-29T09:17:32.673+0000","thumbList":[],"subTitle":"Android初学者高频问题","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3g2IKAPYYnAAFxwyobdPA422.png"]},{"_id":"1200075606839119872","content":"我分享了以下内容,欢迎大家围观,起哄!","type":1,"thumbUpCount":0,"commentCount":0,"url":"/s/1200075011881291776","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3f6OyAHiCeAAE8PSq5KVE517.png","subContent":"这个对于写博客呀,提问题都很方面。可以帮助同学们去描述问题,描述现象,很轻量级,使用简单。有需要的同学,下载一个来使用吧。","subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-28T15:34:55.654+0000","thumbList":[],"subTitle":"非常轻量级的gif录制软件","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3f6OyAHiCeAAE8PSq5KVE517.png"]},{"_id":"1200074792489832448","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":0,"commentCount":0,"url":"/a/1200067479267823616","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3f5t2ARLGnAAJywvrFa84609.png","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-28T15:31:41.498+0000","thumbList":[],"subTitle":"作为一个聪明的程序员,应该如何提bug,提问呢?","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3f5t2ARLGnAAJywvrFa84609.png"]},{"_id":"1200001280555126784","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":0,"commentCount":0,"url":"/a/1198454553108926464","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aBTeAMWARAAAwdcN39nQ151.png","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-28T10:39:34.887+0000","thumbList":[],"subTitle":"AndroidStudio奇淫技巧-代码管理","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aBTeAMWARAAAwdcN39nQ151.png"]},{"_id":"1200001270300053504","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":0,"commentCount":0,"url":"/a/1198499103244406784","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aNt6ABIJGAAO1bKDnK6Q261.gif|https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aMa-ANr2vAAKdDqWFhqE991.gif|https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aL-OAVeSKAAG5wwEHQIc679.gif","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-28T10:39:32.442+0000","thumbList":[],"subTitle":"AndroidStudio奇淫技巧-编码","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aNt6ABIJGAAO1bKDnK6Q261.gif","https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aMa-ANr2vAAKdDqWFhqE991.gif","https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aL-OAVeSKAAG5wwEHQIc679.gif"]},{"_id":"1198877411572305920","content":"我分享了以下内容,欢迎大家围观,起哄!","type":1,"thumbUpCount":1,"commentCount":0,"url":"/s/1198876503853617152","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3bjL6AUyWaAANyjRtAQVU355.png","subContent":"Android Stduio插件下载地址,如果我们的AS下载不了插件,那么可以使用浏览器进行下载,然后再通过inastall from disk安装即可。","subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-25T08:13:43.641+0000","thumbList":["1185049561517850624"],"subTitle":"Android Stduio插件下载地址","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3bjL6AUyWaAANyjRtAQVU355.png"]},{"_id":"1198513486074859520","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":1,"commentCount":0,"url":"/a/1198499103244406784","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aNt6ABIJGAAO1bKDnK6Q261.gif|https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aMa-ANr2vAAKdDqWFhqE991.gif|https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aL-OAVeSKAAG5wwEHQIc679.gif","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-24T08:07:37.041+0000","thumbList":["1185049561517850624"],"subTitle":"AndroidStudio奇淫技巧-编码","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aNt6ABIJGAAO1bKDnK6Q261.gif","https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aMa-ANr2vAAKdDqWFhqE991.gif","https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aL-OAVeSKAAG5wwEHQIc679.gif"]},{"_id":"1198488984297263104","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":1,"commentCount":0,"url":"/a/1198454553108926464","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aBTeAMWARAAAwdcN39nQ151.png","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-24T06:30:15.362+0000","thumbList":["1185049561517850624"],"subTitle":"AndroidStudio奇淫技巧-代码管理","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3aBTeAMWARAAAwdcN39nQ151.png"]},{"_id":"1198453675350151168","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":1,"commentCount":0,"url":"/a/1198435426919108608","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3Z_MOAcOQdAACHzLSqHmo192.png","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-24T04:09:57.053+0000","thumbList":["1185049561517850624"],"subTitle":"AndroidStudio奇淫技巧-项目导入","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3Z_MOAcOQdAACHzLSqHmo192.png"]},{"_id":"1198287706304663552","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":0,"commentCount":0,"url":"/a/1198146335145054208","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3Y-CKAE7R9AAAe0PNEIFo946.png|https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3Y73aAKnjNAAFT53qLkF0823.png|https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3Y7zuAK8w8AABGCZQRXZQ148.png","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-23T17:10:26.949+0000","thumbList":[],"subTitle":"AndroidStudio奇淫技巧-项目相关","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3Y-CKAE7R9AAAe0PNEIFo946.png","https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3Y73aAKnjNAAFT53qLkF0823.png","https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3Y7zuAK8w8AABGCZQRXZQ148.png"]},{"_id":"1198141967687602176","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":0,"commentCount":0,"url":"/a/1198120317357248512","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3YzXOAMJAkAAPJi1jU9Pc469.png","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-23T07:31:20.155+0000","thumbList":[],"subTitle":"AndroidStudio奇淫技巧IDE设置","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3YzXOAMJAkAAPJi1jU9Pc469.png"]},{"_id":"1197834129564094464","content":"我发表了一篇文章,欢迎大家围观.!","type":1,"thumbUpCount":1,"commentCount":0,"url":"/a/1197731399965200384","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3XZvWAPn12AAEFRU3zoRY668.png|https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3Xb9SAaHGKAAAroyVN2_A756.png|https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3XeeaAXL8wAAIMLE7rEKc984.png","subContent":null,"subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-22T11:08:05.827+0000","thumbList":["1185049561517850624"],"subTitle":"安卓网路编程-http协议","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3XZvWAPn12AAEFRU3zoRY668.png","https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3Xb9SAaHGKAAAroyVN2_A756.png","https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3XeeaAXL8wAAIMLE7rEKc984.png"]},{"_id":"1197808497891332096","content":"我分享了以下内容,欢迎大家围观,起哄!","type":1,"thumbUpCount":1,"commentCount":0,"url":"/s/1197802791079366656","covers":"https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3XqYmAW_ilAACgEEu-YtI030.png","subContent":"可以抓包,可以做测试,抓本地访问的,甚至可以抓手机访问的内容,但是手机要设置代理。后面再写一篇如何使用的文章吧。功能强大到用不完,你说呢,哈哈!","subUserName":null,"subUserAvatar":null,"subUserId":null,"userName":"拉大锯","userId":"1153952789488054272","userAvatar":"https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png","publishTime":"2019-11-22T09:26:14.760+0000","thumbList":["1185049561517850624"],"subTitle":"Fiddler抓包工具,墙裂推荐,功能很强大很全的一个工具","position":"第一个用户","company":"阳光沙滩","hasThumbUp":false,"images":["https://imgs.sunofbeaches.com/group1/M00/00/0A/rBsADV3XqYmAW_ilAACgEEu-YtI030.png"]}]
         * pageable : {"sort":{"unsorted":false,"sorted":true},"pageSize":15,"pageNumber":0,"offset":0,"unpaged":false,"paged":true}
         * totalPages : 9
         * totalElements : 131
         * last : false
         * first : true
         * sort : {"unsorted":false,"sorted":true}
         * numberOfElements : 15
         * size : 15
         * number : 0
         */

        private PageableBean pageable;
        private int totalPages;
        private int totalElements;
        private boolean last;
        private boolean first;
        private SortBeanX sort;
        private int numberOfElements;
        private int size;
        private int number;
        private List<ContentBean> content;

        public PageableBean getPageable() {
            return pageable;
        }

        public void setPageable(PageableBean pageable) {
            this.pageable = pageable;
        }

        public int getTotalPages() {
            return totalPages;
        }

        public void setTotalPages(int totalPages) {
            this.totalPages = totalPages;
        }

        public int getTotalElements() {
            return totalElements;
        }

        public void setTotalElements(int totalElements) {
            this.totalElements = totalElements;
        }

        public boolean isLast() {
            return last;
        }

        public void setLast(boolean last) {
            this.last = last;
        }

        public boolean isFirst() {
            return first;
        }

        public void setFirst(boolean first) {
            this.first = first;
        }

        public SortBeanX getSort() {
            return sort;
        }

        public void setSort(SortBeanX sort) {
            this.sort = sort;
        }

        public int getNumberOfElements() {
            return numberOfElements;
        }

        public void setNumberOfElements(int numberOfElements) {
            this.numberOfElements = numberOfElements;
        }

        public int getSize() {
            return size;
        }

        public void setSize(int size) {
            this.size = size;
        }

        public int getNumber() {
            return number;
        }

        public void setNumber(int number) {
            this.number = number;
        }

        public List<ContentBean> getContent() {
            return content;
        }

        public void setContent(List<ContentBean> content) {
            this.content = content;
        }

        public static class PageableBean {
            /**
             * sort : {"unsorted":false,"sorted":true}
             * pageSize : 15
             * pageNumber : 0
             * offset : 0
             * unpaged : false
             * paged : true
             */

            private SortBean sort;
            private int pageSize;
            private int pageNumber;
            private int offset;
            private boolean unpaged;
            private boolean paged;

            public SortBean getSort() {
                return sort;
            }

            public void setSort(SortBean sort) {
                this.sort = sort;
            }

            public int getPageSize() {
                return pageSize;
            }

            public void setPageSize(int pageSize) {
                this.pageSize = pageSize;
            }

            public int getPageNumber() {
                return pageNumber;
            }

            public void setPageNumber(int pageNumber) {
                this.pageNumber = pageNumber;
            }

            public int getOffset() {
                return offset;
            }

            public void setOffset(int offset) {
                this.offset = offset;
            }

            public boolean isUnpaged() {
                return unpaged;
            }

            public void setUnpaged(boolean unpaged) {
                this.unpaged = unpaged;
            }

            public boolean isPaged() {
                return paged;
            }

            public void setPaged(boolean paged) {
                this.paged = paged;
            }

            public static class SortBean {
                /**
                 * unsorted : false
                 * sorted : true
                 */

                private boolean unsorted;
                private boolean sorted;

                public boolean isUnsorted() {
                    return unsorted;
                }

                public void setUnsorted(boolean unsorted) {
                    this.unsorted = unsorted;
                }

                public boolean isSorted() {
                    return sorted;
                }

                public void setSorted(boolean sorted) {
                    this.sorted = sorted;
                }
            }
        }

        public static class SortBeanX {
            /**
             * unsorted : false
             * sorted : true
             */

            private boolean unsorted;
            private boolean sorted;

            public boolean isUnsorted() {
                return unsorted;
            }

            public void setUnsorted(boolean unsorted) {
                this.unsorted = unsorted;
            }

            public boolean isSorted() {
                return sorted;
            }

            public void setSorted(boolean sorted) {
                this.sorted = sorted;
            }
        }

        public static class ContentBean {
            /**
             * _id : 1200696538762956800
             * content : 我发表了一篇文章,欢迎大家围观.!
             * type : 1
             * thumbUpCount : 0
             * commentCount : 0
             * url : /a/1200681268338085888
             * covers : https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3iHb2AR2ktAABV8LFIYGU029.png|https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3iKCqAYWxCAAEp3Frp3bI477.png|https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3iAymAO-J8AABCRyG8suI326.png
             * subContent : null
             * subUserName : null
             * subUserAvatar : null
             * subUserId : null
             * userName : 拉大锯
             * userId : 1153952789488054272
             * userAvatar : https://imgs.sunofbeaches.com/group1/M00/00/07/rBsADV22ZymAV8BwAABVL9XtNSU926.png
             * publishTime : 2019-11-30T08:42:17.361+0000
             * thumbList : []
             * subTitle : Android网络访问不同版本的差异,看完这篇文章你就茅厕顿开了。
             * position : 第一个用户
             * company : 阳光沙滩
             * hasThumbUp : false
             * images : ["https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3iHb2AR2ktAABV8LFIYGU029.png","https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3iKCqAYWxCAAEp3Frp3bI477.png","https://imgs.sunofbeaches.com/group1/M00/00/0B/rBsADV3iAymAO-J8AABCRyG8suI326.png"]
             */

            private String _id;
            private String content;
            private int type;
            private int thumbUpCount;
            private int commentCount;
            private String url;
            private String covers;
            private Object subContent;
            private Object subUserName;
            private Object subUserAvatar;
            private Object subUserId;
            private String userName;
            private String userId;
            private String userAvatar;
            private String publishTime;
            private String subTitle;
            private String position;
            private String company;
            private boolean hasThumbUp;
            private List<?> thumbList;
            private List<String> images;

            public String get_id() {
                return _id;
            }

            public void set_id(String _id) {
                this._id = _id;
            }

            public String getContent() {
                return content;
            }

            public void setContent(String content) {
                this.content = content;
            }

            public int getType() {
                return type;
            }

            public void setType(int type) {
                this.type = type;
            }

            public int getThumbUpCount() {
                return thumbUpCount;
            }

            public void setThumbUpCount(int thumbUpCount) {
                this.thumbUpCount = thumbUpCount;
            }

            public int getCommentCount() {
                return commentCount;
            }

            public void setCommentCount(int commentCount) {
                this.commentCount = commentCount;
            }

            public String getUrl() {
                return url;
            }

            public void setUrl(String url) {
                this.url = url;
            }

            public String getCovers() {
                return covers;
            }

            public void setCovers(String covers) {
                this.covers = covers;
            }

            public Object getSubContent() {
                return subContent;
            }

            public void setSubContent(Object subContent) {
                this.subContent = subContent;
            }

            public Object getSubUserName() {
                return subUserName;
            }

            public void setSubUserName(Object subUserName) {
                this.subUserName = subUserName;
            }

            public Object getSubUserAvatar() {
                return subUserAvatar;
            }

            public void setSubUserAvatar(Object subUserAvatar) {
                this.subUserAvatar = subUserAvatar;
            }

            public Object getSubUserId() {
                return subUserId;
            }

            public void setSubUserId(Object subUserId) {
                this.subUserId = subUserId;
            }

            public String getUserName() {
                return userName;
            }

            public void setUserName(String userName) {
                this.userName = userName;
            }

            public String getUserId() {
                return userId;
            }

            public void setUserId(String userId) {
                this.userId = userId;
            }

            public String getUserAvatar() {
                return userAvatar;
            }

            public void setUserAvatar(String userAvatar) {
                this.userAvatar = userAvatar;
            }

            public String getPublishTime() {
                return publishTime;
            }

            public void setPublishTime(String publishTime) {
                this.publishTime = publishTime;
            }

            public String getSubTitle() {
                return subTitle;
            }

            public void setSubTitle(String subTitle) {
                this.subTitle = subTitle;
            }

            public String getPosition() {
                return position;
            }

            public void setPosition(String position) {
                this.position = position;
            }

            public String getCompany() {
                return company;
            }

            public void setCompany(String company) {
                this.company = company;
            }

            public boolean isHasThumbUp() {
                return hasThumbUp;
            }

            public void setHasThumbUp(boolean hasThumbUp) {
                this.hasThumbUp = hasThumbUp;
            }

            public List<?> getThumbList() {
                return thumbList;
            }

            public void setThumbList(List<?> thumbList) {
                this.thumbList = thumbList;
            }

            public List<String> getImages() {
                return images;
            }

            public void setImages(List<String> images) {
                this.images = images;
            }
        }
    }
}

适配器的代码:

java
复制代码
package com.sunofbeaches.javanetdemo;

import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;

import java.util.ArrayList;
import java.util.List;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

public class ResultAdapter extends RecyclerView.Adapter<ResultAdapter.InnerAdapter> {

    private List<MomentItem.DataBean.ContentBean> mData = new ArrayList<>();

    @NonNull
    @Override
    public InnerAdapter onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_moment,parent,false);
        return new InnerAdapter(itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull InnerAdapter holder,int position) {
        View itemView = holder.itemView;
        TextView momentTitle = itemView.findViewById(R.id.moment_title);
        ImageView avatar = itemView.findViewById(R.id.user_avatar);
        TextView userInfo = itemView.findViewById(R.id.user_info);
        TextView userName = itemView.findViewById(R.id.user_name);
        MomentItem.DataBean.ContentBean contentBean = mData.get(position);
        String subTitle = contentBean.getSubTitle();
        if(!TextUtils.isEmpty(subTitle)) {
            momentTitle.setText(subTitle);
        } else {
            momentTitle.setText(contentBean.getContent());
        }
        userName.setText(contentBean.getUserName());
        userInfo.setText(contentBean.getPosition() + "@" + contentBean.getCompany());
	//图片我们先借助于Glide,下一篇文章我们再去了解如何加载图片
        Glide.with(itemView.getContext()).load(contentBean.getUserAvatar()).into(avatar);
    }

    @Override
    public int getItemCount() {
        return mData.size();
    }

    public void setData(MomentItem result) {
        mData.clear();
        mData.addAll(result.getData().getContent());
        notifyDataSetChanged();
    }

    public class InnerAdapter extends RecyclerView.ViewHolder {
        public InnerAdapter(@NonNull View itemView) {
            super(itemView);
        }
    }
}

item的布局的代码如下:

xml
复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="10dp">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/user_avatar"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:src="@mipmap/ic_launcher" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:orientation="vertical">

            <TextView
                android:id="@+id/user_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="2dp"
                android:text="用户名称"
                android:textColor="#0086FF"
                android:textSize="18sp" />

            <TextView
                android:id="@+id/user_info"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="2dp"
                android:text="用户信息" />

        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:orientation="vertical">

        <TextView
            android:id="@+id/moment_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="内容标题"
            android:textSize="18sp" />



    </LinearLayout>


</LinearLayout>

最终运行起来的结果如何呢?

图片描述

而网页版的是这样子的:

图片描述

其实数据是一毛一样的。

o啦,下一篇文章我们再去了解一下如何加载图片。

附录

java8API文档

本文由 拉大锯 原创发布于 阳光沙滩 , 未经作者授权,禁止转载
评论
0 / 1024
用户头像
UI一直不更新是什么问题呀 也没有报错 log也能出来内容
2023-04-10 07:52回复
回复@水淹三丈身: 用的api数据是阳光沙滩商城的第一个
2023-04-10 07:52回复
回复@水淹三丈身: 输出日志,首先确定数据是否有请求回来。如果请求回来了,看看更UI的线程是否是对的。
2023-04-10 08:06回复
回复@拉大锯: 可以请求回来 UI线程也是对的
2023-04-10 08:11回复
回复@水淹三丈身: 那你提问贴代码吧。
2023-04-10 08:18回复
推荐文章
一篇文章讲清楚雅思、托福、GRE、SAT、GMAT:它们是什么?有什么区别?应该考哪个?
面对IELTS、TOEFL、GRE、SAT和GMAT,你是否感到困惑?本文深度解析五大考试的核心区别:从语言证明到学术能力评估,明确各自适用人群与场景。特别更新2026年托福改革及最新评分体系,通过对比表格与真实申请案例,助你精准定位目标考试,避免无效备考,高效规划海外升学之路。
一篇文章讲清楚 Android 签名:PK8、X509.PEM、JKS 是什么?它们有什么关系?
深入解析Android应用与系统签名的核心文件:PK8、X509.PEM与JKS。本文从非对称加密原理出发,厘清私钥、证书与密钥库的本质区别及相互转换方法,涵盖AOSP平台签名与普通应用发布的实际场景。通过对比V1-V4签名方案及解答常见疑难,助你掌握保障APK完整性与身份认证的关键技术,规避签名丢失或冲突风险。
系统监控运维系统
你是否也深受证书过期、磁盘满载等运维痛点的折磨?排查耗时,影响线上体验。本文分享一款自研运维系统面板,集成证书统一监测、资源预警及WebSSH等功能,实现问题快速定位与处理。附代码共享链接,欢迎参考或二次开发,提升运维效率。
断点说搞个万年历,怎么搞?
想快速拥有一个专属的程序员日历?只需一篇清晰的设计文档,剩下的交给AI!本文带你从零搭建“sob-calendar”项目,集成农历、节气及独特的程序员运势功能。通过实际案例展示如何利用AI高效生成代码并部署上线,让繁琐的开发工作变得轻松有趣,快来体验科技与传统历法的奇妙碰撞吧!
linux服务器的日志、容器清理
本手册提供了一套全面的Linux服务器磁盘清理与排查方法,帮助用户高效管理磁盘空间。通过查看磁盘使用情况、分析Docker占用、清理无用容器和日志,确保系统运行流畅。适合需要优化服务器性能的运维人员参考。
记给网站接入图形验证码
本文分享了如何为个人站点添加图形验证码以提升安全性,详细介绍了使用第三方接口实现验证码功能的过程,并通过代码示例展示了具体实现方式。对于关注网站安全的开发者来说,这篇文章提供了实用的参考价值。
Java开发环境搭建
本文是一份详细的Java开发环境搭建指南,涵盖了Java的发展历史、版本选择及安装配置过程。无论你是初学者还是有经验的开发者,都能从中找到实用的信息和步骤,帮助你快速上手Java开发。
Vue3.js项目的创建
本文详细介绍了如何使用Vue3创建项目,包括Node.js的安装和配置,以及项目的初始化过程。适合初学者学习如何快速搭建Vue3开发环境,并推荐了相关课程供进一步学习。
Network Tools : 您的运维“助手”升级了
Network Tools是一款专为解决运维难题而设计的软件,集设备管理、配置备份、性能监控和告警处理于一体。通过统一的工作台,帮助运维人员更高效地管理资产、定位故障并提升团队协作效率。无论是设备在线状态还是具体问题排查,都能得到全面支持。
Ubuntu 软件安装与彻底卸载指南
本文详细介绍了在 Ubuntu 系统中如何规范安装和彻底卸载 .deb 格式软件,包括依赖修复、残留清理以及图形化工具推荐,适合需要维护系统环境的用户。
JavaWeb开发客户程序更新特殊环境下的骚操作
本文分享了在无外网环境下,如何利用Docker和docker-compose实现高效部署的实战经验。通过基础镜像和本地jar包挂载的方式,解决了内网环境下的依赖问题,适合需要灵活部署方案的技术人员参考。
Linux 防火墙完全指南:从原理到多发行版实战
本文全面解析Linux防火墙的底层原理与主流工具配置,涵盖UFW、firewalld、iptables、nftables等方案,适合不同发行版用户。从基础概念到生产环境加固建议,助你掌握核心安全策略,确保服务器与网络的安全运行。
水上派对英语单词篇
探索FLOATOPIA水上派对的完整指南,涵盖签到流程、场地指引、安全须知、活动安排及夜场舞会等实用英语词汇与对话。无论是初学者还是老手,都能轻松掌握关键术语,享受完美水上体验。
麒麟操作系统下使用 virt-customize 重置虚拟机 root 密码实战
本文详细介绍了在麒麟操作系统环境下使用 virt-customize 工具重置 KVM 虚拟机 root 密码的完整流程,包含安装步骤、常见问题及解决方案,帮助运维人员高效处理密码遗忘或批量初始化场景,避免数据丢失。
浅析JS预编译-函数篇
本文详细讲解了JavaScript中函数的预编译过程,包括AO对象的创建、变量和函数声明的提升,以及执行阶段的变化。适合初学者了解JS执行机制,帮助深入理解代码运行逻辑。
访问Github的另一种姿势
本文介绍了如何通过Watt ToolKit等工具加速访问Github,适合对网络技术感兴趣的读者。内容涵盖工具介绍、下载和使用方法,以及一些实用技巧,值得一看。
使用Gulp压缩JS
本文详细介绍了如何使用Gulp压缩JavaScript文件,特别是支持ES6语法的处理方法。通过实际操作和效果对比,帮助开发者提升代码性能,适合对前端自动化工具感兴趣的读者。
使用Gulp压缩CSS
本文详细介绍了如何使用Gulp工具对CSS文件进行压缩,提升网页加载速度。适合需要优化静态资源的开发者,提供清晰的步骤和示例,帮助快速上手。
从0部署Nuxtjs项目
本文详细介绍了如何将Nuxt.js项目部署到公网,涵盖Node.js安装、环境配置、源码上传及使用PM2启动服务的全过程,适合开发者学习和实践。
Linux 命令行美化利器:tree 命令完全指南(安装 + 全部参数详解)
掌握 Linux 下的 `tree` 命令,快速直观地查看目录结构。本文详细讲解安装方法、参数含义及实战场景,适合开发者和系统管理员提升工作效率。
Linux常用命令(一)
本文详细介绍了Linux基础命令,包括文件操作、系统显示、网络状态、软件包管理等,适合初学者学习和查阅,是掌握Linux系统的实用指南。
大模型推理参数解码:温度、Top-p 与核采样如何塑造生成文本的灵魂
探索大语言模型的采样参数如何塑造生成内容,从温度到Top-p,从惩罚机制到熵控制,揭示背后的信息论原理与实践策略。了解如何通过参数调优,让AI既保持知识的严谨,又拥有创造力的自由。
记从0使用Claude code写代码
本文介绍了如何使用Claude Code搭配DeepSeek进行编程,详细讲解了安装Node.js、全局安装Claude、配置模型以及使用方法。对于开发者来说,这是一份实用的技术教程,尤其适合对AI编程工具感兴趣的读者。
Android-Studio-Gradle同步失败-Library为null的通用排查指南
遇到 Android Studio Gradle Sync 失败时,不要轻易删除全局缓存。本文详细解析了错误原因,并提供了一系列精准的排查步骤和解决方案,帮助开发者快速定位并解决问题,提升开发效率。
PHP实现密码加密
本文详细介绍了Bcrypt密码加密技术及其在PHP中的应用,帮助开发者提升用户密码的安全性。通过实际代码示例,展示了如何使用password_hash和password_verify函数进行密码加密与验证,是学习网络安全知识的实用指南。
WordCloud效果,滚动标签
本文详细介绍了如何在Vue项目中集成WordCloud组件,包括依赖安装、属性配置和使用方法。适合开发者学习如何实现数据可视化功能,提升项目交互体验。
从0使用WordPress搭建一个优美的网站
本文详细介绍了如何使用WordPress搭建一个美观的网站,从安装到主题配置和功能拓展,为读者提供了实用的操作指南。无论是初学者还是有一定经验的开发者,都能从中获得有价值的参考。
JS实现在网站底部添加运行时间
想知道如何在网站底部显示运行时间?本文详细讲解了通过JavaScript实现这一功能的方法,包括时间计算逻辑和代码实现。适合前端开发者学习参考,轻松为网站添加实用功能。
在Vercel上部署Hexo博客
本文详细介绍了如何在Vercel上快速部署Hexo博客,无需后端服务即可实现高效发布。相比传统方式,省去了手动生成和上传静态文件的步骤,更加便捷。适合想要搭建个人博客的开发者参考。
从0搭建一个Hexo博客
本文详细介绍了Hexo博客框架的使用方法,从安装到部署全流程讲解,适合想快速搭建个人博客的技术爱好者。内容清晰易懂,是入门Hexo的理想指南。