项目咨询——用AsyncTask制作头条新闻listview展示(图片和文字)

**

Activity

**
public class ZKActivity extends AppCompatActivity {

private ListView news;
private NewsAdapter mAdapter;

@Override protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_zk);

news = findViewById(R.id.news);
mAdapter = new NewsAdapter(this);
news.setAdapter(mAdapter);

//news.setOnClickListener();

news.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Intent intent = new Intent(ZKActivity.this, DetailActivity.class);
    intent.putExtra(URL_EXTRA_DATA_KEY, mAdapter.getItem(position).getUrl());
    startActivity(intent);
  }
});

loadData();

}

private String ttUrl =
http://result.eolinker.com/k2BaduF2a6caa275f395919a66ab1dfe4b584cc60685573?uri=tt”;
private String gnUrl =
http://result.eolinker.com/k2BaduF2a6caa275f395919a66ab1dfe4b584cc60685573?uri=gn”;

@SuppressLint(“StaticFieldLeak”) private void loadData() {
new AsyncTask<String, Void, List<NewsResponseBean.NewsItem>>() {
@Override protected List<NewsResponseBean.NewsItem> doInBackground(String… strings) {
List<NewsResponseBean.NewsItem> result = new ArrayList<>();

    //
    for (String url:strings) {
      NewsResponseBean bean = NetUtil.getRequest(url, NewsResponseBean.class);
      //只有最后一组结果
      //result = bean.getResult().getData();
      result.addAll(bean.getResult().getData());
    }

    return result;
  }

  @Override protected void onPostExecute(List<NewsResponseBean.NewsItem> newsItems) {
    mAdapter.setDatas(newsItems);
  }
}.execute(ttUrl, gnUrl);

}
}
**

Adapter适配器

**
public class NewsAdapter extends BaseAdapter {

private List<NewsResponseBean.NewsItem> mDatas;
private Context context;
// 0 - count-1
private final int TT_ITEM = 0;
private final int GN_ITEM = 1;
private final int ITEM_COUNT = 2;

//展示 两种类型条目:文本 文本+图片

public NewsAdapter(Context context) {
this.context = context;
mDatas = new ArrayList<>();
}

public void setDatas(List<NewsResponseBean.NewsItem> datas) {
this.mDatas = datas;
notifyDataSetChanged();
}

@Override public int getViewTypeCount() {
return ITEM_COUNT;
}

@Override public int getItemViewType(int position) {
return getItem(position).isTT() ? TT_ITEM : GN_ITEM;
}

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

@Override public NewsResponseBean.NewsItem getItem(int position) {
return mDatas.get(position);
}

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

@Override public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;

//单一职责

//1 创建item

if (convertView == null) {
  convertView = LayoutInflater.from(context).inflate(
      getItemViewType(position) == GN_ITEM ? R.layout.item_gn : R.layout.item_tt
      , parent, false);
  viewHolder = new ViewHolder(convertView);
} else {
  viewHolder = (ViewHolder) convertView.getTag();
}

viewHolder.bind(getItem(position));

return convertView;

}

class ViewHolder {
//如果是国内新闻,icon不为空;否则icon为空
ImageView icon;

TextView title;
TextView date;

public ViewHolder(View convertView) {
  title = convertView.findViewById(R.id.title);
  date = convertView.findViewById(R.id.date);
  //可能为空
  icon = convertView.findViewById(R.id.icon);
  convertView.setTag(this);
}

public void bind(NewsResponseBean.NewsItem newsItem) {
  title.setText(newsItem.getTitle());
  date.setText(newsItem.getDate());
  if(icon != null) {
    //加载图片
    icon.setImageResource(R.mipmap.ic_launcher);
  }
 /* if (getItemViewType(position) == GN_ITEM) {
    //加载图片
  }*/
}

}
}
**

Bean

**
public class NewsResponseBean {
private String reason;
private Result result;

public String getReason() {
return reason;
}

public Result getResult() {
return result;
}

public class Result {
private int stat;
private List data;

public int getStat() {
  return stat;
}

public List<NewsItem> getData() {
  return data;
}

}

public class NewsItem {
private final String tt = “头条”;
private String title;
private String date;
private String category;
private String thumbnail_pic_s;
private String url;

public String getUrl() {
  return url;
}

public String getTitle() {
  return title;
}

public String getDate() {
  return date;
}

public String getCategory() {
  return category;
}

public String getThumbnail_pic_s() {
  return thumbnail_pic_s;
}

//当前新闻条目 是否是头条新闻
public boolean isTT() {
  return category.equals(tt);
}

}
}

**

判断网络状态

**
public class NetUtil {

//执行get请求,返回Bean
public static E getRequest(String urlStr, Class clazz) {
String result = getRequest(urlStr);
E e = (E) new Gson().fromJson(result, clazz);
return e;
}

//执行get请求,返回String结果
public static String getRequest(String urlStr) {
String result = “”;
try {
URL url = new URL(urlStr);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod(“GET”);
urlConnection.setConnectTimeout(5000);
urlConnection.setReadTimeout(5000);
int responseCode = urlConnection.getResponseCode();
if(responseCode == 200) {
result = stream2String(urlConnection.getInputStream());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}

//将字节流转换成字符
private static String stream2String(InputStream is) throws IOException {

/*InputStream is;
InputStreamReader isr;
BufferedReader br;

OutputStream os;
OutputStreamWriter osw;
BufferedWriter bw;*/

InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
StringBuilder stringBuilder = new StringBuilder();

for (String tmp = br.readLine(); tmp != null; tmp = br.readLine()) {
  stringBuilder.append(tmp);
}

return stringBuilder.toString();

}

//是否有可用的网络
public static boolean hasNetwork(Context context) {
ConnectivityManager cm =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();

//有网络设备 且设备可用
return activeNetworkInfo != null && activeNetworkInfo.isAvailable();

}

//判断是否是手机网络
public static boolean isMobileNetwork(Context context) {
//连接管理服务
ConnectivityManager cm =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

//获取到当前默认可用网络信息
NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();

//有网络设备 且 网络设备是手机网络
return activeNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE;

}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值