Android学习之路——网络编程学习——新闻客户端(AsyncHttpClient)
来源:互联网 发布:linux 死机日志分析 编辑:程序博客网 时间:2024/05/28 05:14
新闻客户端
我们来完成一个小案例,在这过程中可能会遇到很多的问题,希望我们在问题中成长。
那我首先看下我们目标完成的界面。
在完成项目前,我们首先完成准备工作。
1、我们首先下载AsyncHttpClient的源代码。
(https://github.com/loopj/android-async-http)
2、下载SmartImageView
(https://github.com/loopj/android-smart-image-view)
3、下载httpcore
(http://hc.apache.org/httpcomponents-core-4.4.x/index.html)
一、
完成包的准备,我们可以新建项目来完成我们的案例了。
将下载的jar包,粘贴到项目工程的libs文件夹下,然后右击选择Build Path——Add to Build Path
关于AsyncHttpClient的常用类及作用:
AsyncHttpClient 用来访问网络的类
RequestParams 用于添加参数的类
AsyncHttpResponseHandler 访问网络回调后的接口
首先,我们完成页面布局。
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="cn.edu.bzu.news.MainActivity"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/loading" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" android:visibility="invisible"> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="正在加载信息..." /> </LinearLayout> <ListView android:id="@+id/lv_news" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout></RelativeLayout>
demopage
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="65dp"> <com.loopj.android.image.SmartImageView android:id="@+id/siv_icon" android:layout_width="80dp" android:layout_height="60dp" android:scaleType="centerCrop" android:src="@mipmap/ic_launcher" android:layout_alignParentLeft="true" android:layout_alignParentStart="true"></com.loopj.android.image.SmartImageView> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginTop="10dp" android:layout_toRightOf="@id/siv_icon" android:ellipsize="end" android:maxLength="20" android:singleLine="true" android:text="我是标题" android:textColor="#000000" android:textSize="18sp" /> <TextView android:id="@+id/tv_description" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tv_title" android:layout_marginLeft="5dp" android:layout_marginTop="5dp" android:layout_toRightOf="@id/siv_icon" android:ellipsize="end" android:maxLength="16" android:maxLines="1" android:text="我是描述" android:textColor="#99000000" android:textSize="14sp" /> <TextView android:id="@+id/tv_type" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginBottom="5dp" android:layout_marginRight="10dp" android:text="评论" android:textColor="#99000000" android:textSize="12sp" /></RelativeLayout>
demopage
新建包:
adapter包:
NewsAdapter
package cn.edu.bzu.news.adapter;import android.content.Context;import android.support.annotation.NonNull;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.TextView;import com.loopj.android.image.SmartImageView;import java.util.List;import cn.edu.bzu.news.R;import cn.edu.bzu.news.entity.NewsInfo;public class NewsAdapter extends ArrayAdapter<NewsInfo>{ public NewsAdapter(Context context, List<NewsInfo> objects) { super(context, R.layout.news_item, objects); } @NonNull @Override public View getView(int position, View convertView, ViewGroup parent) { NewsInfo newsinfo= getItem(position);//传递position,获取当前位置对应的newsinfo新闻信息 View view=null; viewHolder viewHolder; if(convertView==null){ //判断convertView中是否加载了布局,有没有缓存。为空说明没有缓存 view=LayoutInflater.from(getContext()).inflate(R.layout.news_item,null); viewHolder=new viewHolder(); viewHolder.siv= (SmartImageView) view.findViewById(R.id.siv_icon); viewHolder.tv_title= (TextView) view.findViewById(R.id.tv_title); viewHolder.tv_description= (TextView) view.findViewById(R.id.tv_description); viewHolder.tv_type= (TextView) view.findViewById(R.id.tv_type); view.setTag(viewHolder); //保存 }else{ view=convertView; viewHolder=(viewHolder) view.getTag(); } viewHolder.siv.setImageUrl(newsinfo.getIcon()); viewHolder.tv_title.setText(newsinfo.getTitle());//传递题目 viewHolder.tv_description.setText(newsinfo.getDescription()); viewHolder.tv_type.setText(newsinfo.getType()+""); return view; } class viewHolder{//添加类,封装需要查找的控件 TextView tv_title; TextView tv_description; TextView tv_type; SmartImageView siv; }}
entity包:
NewsInfo
package cn.edu.bzu.news.entity;/** * Created by Administrator on 2017/5/18. */public class NewsInfo { private String icon; private String title; private String description; private int type; private long comment; public NewsInfo(String icon, String title, String description, int type, long comment) { this.icon = icon; this.title = title; this.description = description; this.type = type; this.comment = comment; } public String getIcon() { return icon; } public void setIcon(String icon) { this.icon = icon; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public int getType() { return type; } public void setType(int type) { this.type = type; } public long getComment() { return comment; } public void setComment(long comment) { this.comment = comment; }}
tool包:
JsonParse:
package cn.edu.bzu.news.tool;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import java.lang.reflect.Type;import java.util.List;import cn.edu.bzu.news.entity.NewsInfo;/** * Created by Administrator on 2017/5/18. */public class JsonParse { public static List<NewsInfo>getNewsInfo(String json){ Gson gson =new Gson(); Type listType=new TypeToken<List<NewsInfo>> (){ }.getType(); List<NewsInfo>newsInfos=gson.fromJson(json,listType); return newsInfos; }}
MainActivity:
package cn.edu.bzu.news;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.Toast;import com.loopj.android.http.AsyncHttpClient;import com.loopj.android.http.AsyncHttpResponseHandler;import java.io.UnsupportedEncodingException;import java.util.List;import cn.edu.bzu.news.entity.NewsInfo;import cn.edu.bzu.news.tool.JsonParse;public class MainActivity extends AppCompatActivity { private ListView lvNews; private List<NewsInfo> newsInfos; private LinearLayout loading; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lvNews=(ListView)findViewById(R.id.lv_news); loading=(LinearLayout)findViewById(R.id.loading); fillData(); } private void fillData(){ AsyncHttpClient client =new AsyncHttpClient(); client.get("http://10.61.28.176:8080/NewsInfo.json",new AsyncHttpResponseHandler(){ @Override public void onSuccess(int i, org.apache.http.Header[] headers, byte[] bytes) { try{ String json=new String(bytes,"utf-8"); newsInfos= JsonParse.getNewsInfo(json); if(newsInfos==null){ Toast.makeText(MainActivity.this,"解析失败", Toast.LENGTH_LONG).show(); }else{ loading .setVisibility(View.INVISIBLE); lvNews.setAdapter(new cn.edu.bzu.news.adapter.NewsAdapter(MainActivity.this,newsInfos)); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } @Override public void onFailure(int i, org.apache.http.Header[] headers, byte[] bytes, Throwable throwable) { } } ); }}
三、错误
在JsonParse中Gson的错误
解决:
File—Project Struct—Dependencies
添加完成之后就可以修改错误。
完成关于网络编程的小案例了。
阅读全文
0 0
- Android学习之路——网络编程学习——新闻客户端(AsyncHttpClient)
- android开发笔记之网络编程—简易新闻客户端
- android学习——使用开源程序AsyncHttpClient访问网络
- 实验:android案例——新闻客户端(使用开源项目AsyncHttpClient和SmartImageView)
- 新闻客户端——SmartImageView——AsyncHttpClient
- Android---网络编程之简易新闻客户端
- Android---网络编程(AsyncHttpClient)
- Android---SmartImageView和AsyncHttpClient的应用之《新闻客户端》案例
- 网络编程学习之路—1
- 网络编程学习之路—2
- Android案例—新闻客户端
- AsyncHttpClient笔记——如何构造客户端
- 网络编程之开源项目和JSON解析技术的使用——简易新闻客户端
- android 学习随笔九(网络:简单新闻客户端实现)
- Android学习笔记——网络编程
- Android 新闻客户端学习笔记
- Android 新闻客户端的学习
- 案例—新闻客户端
- 1035. 插入与归并(25) PAT
- B. Rebus
- Scala 中 10 个超赞的集合操作函数
- Spring框架的核心思想以及使用的步骤
- position属性之absolute的那些事
- Android学习之路——网络编程学习——新闻客户端(AsyncHttpClient)
- git代码版本管理
- Linux从入门到放弃之先安装一个JDK
- 取石子游戏(威佐夫博弈)
- 批处理操作Oracle数据库创建表空间、用户及导入数据
- WebRTC源码分析三:视频处理流程
- Egret4.1.0的高清文本显示效果设置
- (81)蓝图基础用户指南
- JavaScript 继承