显示新闻列表

 清单文件中添加网络访问权限

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

 

依赖

 

 

 compileOptions{
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
	implementation 'com.google.android.material:material:1.0.0'    		
	implementation 'com.github.bumptech.glide:glide:4.11.0'
	implementation 'com.google.code.gson:gson:2.8.6'
	implementation 'com.squareup.okhttp3:okhttp:4.4.1'
	implementation 'org.greenrobot:eventbus:3.3.1'

	compileOnly 'org.projectlombok:lombok:1.18.24'
	annotationProcessor 'org.projectlombok:lombok:1.18.24'
	testCompileOnly 'org.projectlombok:lombok:1.18.24'
	testAnnotationProcessor 'org.projectlombok:lombok:1.18.24'
activity_main
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent">
<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/listview"/>
</LinearLayout>

new_item

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content"
    android:orientation="horizontal"
    android:layout_height="wrap_content">
    
    <ImageView
        android:layout_width="100dp"
        android:layout_height="80dp"
        android:id="@+id/new_image"
        android:layout_gravity="center"
        />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:orientation="vertical">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="null"
            android:layout_gravity="center"
            android:gravity="center"
            android:id="@+id/new_title"
            android:layout_marginTop="20dp"/>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="评论人数:"
                android:textSize="16sp"
                android:layout_marginStart="15dp"
                android:layout_gravity="center"
                android:layout_marginTop="10dp"/>
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="null"
                android:layout_gravity="center"
                android:id="@+id/new_comment"
                android:textSize="16sp"
                android:layout_marginTop="10dp"/>
        </LinearLayout>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="null"
            android:textSize="16sp"
            android:layout_marginStart="15dp"
            android:layout_gravity="center"
            android:id="@+id/new_time"
            android:layout_marginTop="10dp"/>
    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"/>
</LinearLayout>

MainActivity

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.ListView;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import org.jetbrains.annotations.NotNull;
import org.json.JSONArray;
import org.json.JSONObject;

import java.io.IOException;
import java.net.URL;
import java.util.List;

import lombok.SneakyThrows;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {

    private ListView listview;
    private  NewsItemAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        listview = (ListView) findViewById(R.id.listview);
        adapter=new NewsItemAdapter(MainActivity.this);
        listview.setAdapter(adapter);
        inData();
    }

    private void inData() {
        String url=OkhttpUtil.URL+OkhttpUtil.NEWS;
        OkhttpUtil.getRequest(url, new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {
                Log.e("msg",e.getMessage());
            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
                     String json=response.body().string();
                Log.d("msg",json);
                     bindData(json);
            }
        });
    }
    public void bindData(String json){
        Message msg=new Message();
        msg.obj=json;
        msg.what=1;
        mHandler.sendMessage(msg);
    }
    Handler mHandler=new Handler(new Handler.Callback() {
        @SneakyThrows
        @Override
        public boolean handleMessage(@NonNull Message msg) {
            if (msg.what==1){
                String json=msg.obj.toString();
                JSONObject jsonObject=new JSONObject(json);
                JSONArray jsonArray=jsonObject.getJSONArray("rows");
                List<NewsBean> list=JsonUtil.toList(jsonArray.toString(),NewsBean.class);
                adapter.setData(list);
            }
            return false;
        }
    });
}
JsonUtil
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;

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


/**
 * JSON解析类
 * @author jack
 */
public class JsonUtil<T> {
    public static <T> List<T> toList(String json, Class<T> cls){
        List<T> list = new ArrayList<T>();
        Gson gson = new Gson();
        JsonArray jsonArray = JsonParser.parseString(json).getAsJsonArray();
        for (JsonElement jsonElement: jsonArray) {
            list.add(gson.fromJson(jsonElement, cls));
        }
        return list;
    }
}

NewsBean


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class NewsBean implements Serializable {

    /**
     * searchValue : null
     * createBy : 1
     * createTime : 2021-05-08 09:57:54
     * updateBy : 1
     * updateTime : 2022-06-07 16:58:13
     * remark : null
     * params : {}
     * id : 28
     * appType : smart_city
     * cover : /prod-api/profile/upload/image/2021/05/08/c044462a-2ce3-4f28-b2a3-908164b82498.jpg
     * title : iPhone 13再爆猛料:不止刘海屏有望缩小,超大杯或将搭载LTPO屏
     * subTitle : null
     * content : <p>	按照去年iPhone 12系列的发布时间节点来看,如今距离苹果新一代iPhone发布的时间还有很长一段时间,但这并未能够阻挡消费者对于iPhone 13系列的关注热情。每当网上一有关于新机的爆料信息,总能引起了不少网友的围观与讨论</p><p><br></p><p>	就在近日,国外一数码博主便通过一则视频,向广大网友展示疑似iPhone 13 Pro Max的机模。根据该视频显示,全新的iPhone 13 Pro Max在外观上并没有做出太大的改变,依旧保持了刘海屏设计,同时后置依旧采用了三摄模组。区别的是,相较于上一代iPhone 13 Pro Max似乎机身厚度变大了些许,且摄像头模组的凸起程度也更高,而且正面的刘海屏也能感觉到明显变窄了不少。</p><p><br></p><p><img src="/prod-api/profile/upload/image/2021/05/17/863b3306-9fad-4255-a065-0f59b57c7cc4.jpg"></p><p>	</p><p>      至于配置方面,iPhone 13 Pro Max有望搭载LTPO显示屏,借助于这一屏幕材质的特殊性,能够有效降低屏幕的功耗,iPhone 13 Pro Max大概率将会支持120Hz屏幕刷新率,从而拉开苹果手机的高刷屏序幕。此外,存储空间也或将升级至1TB内存。如果真的如此的话,那么对于广大果粉朋友来说,绝对算得上是近几年苹果带给用户最大的福音。</p><p><img src="/prod-api/profile/upload/image/2021/05/17/ec953328-80e2-457a-a18b-d61009a8e498.jpg"></p>
     * status : Y
     * publishDate : 2021-05-08
     * tags : null
     * commentNum : 836
     * likeNum : 2230
     * readNum : 2134
     * type : 22
     * top : N
     * hot : N
     */

    private Object searchValue;
    private String createBy;
    private String createTime;
    private String updateBy;
    private String updateTime;
    private Object remark;
    private ParamsBean params;
    private int id;
    private String appType;
    private String cover;
    private String title;
    private Object subTitle;
    private String content;
    private String status;
    private String publishDate;
    private Object tags;
    private int commentNum;
    private int likeNum;
    private int readNum;
    private String type;
    private String top;
    private String hot;

    @NoArgsConstructor
    @Data
    public static class ParamsBean {
    }
}
NewsItemAdapter

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

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;

public class NewsItemAdapter extends BaseAdapter {

    private List<NewsBean> objects = new ArrayList<NewsBean>();

    private Context context;
    private LayoutInflater layoutInflater;

    public NewsItemAdapter(Context context) {
        this.context = context;
        this.layoutInflater = LayoutInflater.from(context);
    }
    public void  setData(List<NewsBean> objects){
        this.objects=objects;
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return objects.size();
    }

    @Override
    public NewsBean getItem(int position) {
        return objects.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = layoutInflater.inflate(R.layout.news_item, null);
            convertView.setTag(new ViewHolder(convertView));
        }
        initializeViews((NewsBean)getItem(position), (ViewHolder) convertView.getTag());
        return convertView;
    }

    private void initializeViews(NewsBean object, ViewHolder holder) {
        //TODO implement
        holder.newComment.setText(String.valueOf(object.getCommentNum()));
        Glide.with(context).load(OkhttpUtil.URL+object.getCover()).into(holder.newImage);
        holder.newTime.setText(object.getCreateTime());
        holder.newTitle.setText(object.getTitle());
    }

    protected class ViewHolder {
        private ImageView newImage;
        private TextView newTitle;
        private TextView newComment;
        private TextView newTime;

        public ViewHolder(View view) {
            newImage = (ImageView) view.findViewById(R.id.new_image);
            newTitle = (TextView) view.findViewById(R.id.new_title);
            newComment = (TextView) view.findViewById(R.id.new_comment);
            newTime = (TextView) view.findViewById(R.id.new_time);
        }
    }
}
OkhttpUtil
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;

public class OkhttpUtil {
    public static final String URL="http://124.93.196.45:10001";
    public static final String NEWS="/prod-api/press/press/list";
    public static  void getRequest(String url, Callback callback){
        OkHttpClient okHttpClient=new OkHttpClient();
        Request request=new Request.Builder().get().url(url).build();
        okHttpClient.newCall(request).enqueue(callback);
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值