学习了有一个多星期的android了,今天跟着视频来个小案例练习下,在这里记录下:

开发软件 android studio

第一步:先在activity_main.xml文件中写布局代码,这里用一个listview来展示每一条新闻

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">

<ListView
android:id="@+id/lv_news"
android:layout_width="wrap_content"
android:layout_height="match_parent">

</ListView>




</RelativeLayout>

知识点补充:

fill_parent

设置一个构件的布局为fill_parent将强制性地使构件扩展,以填充布局单元内尽可能多的空间。

wrap_content

设置一个视图的尺寸为wrap_content将强制性地使视图扩展以显示全部内容。

match_parent
level8开始fill_parent替换为match_parent,match_parent和fill_parent是一个意思 .两个参数意思一样

tools:context=".MainActivity">

表示,该布局配置文件的使用环境上下文为

MainActivity

这个类

第二步:为每一个新闻项自定义一个布局文件

<?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="wrap_content"
android:padding="5dp"
>

<com.loopj.android.image.SmartImageView
android:id="@+id/siv_listvie_item_icon"
android:layout_width="100dip"
android:layout_height="60dip"
android:src="@drawable/a2"
/>
<TextView
android:id="@+id/tv_listview_item_title"
android:layout_toRightOf="@id/siv_listvie_item_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="3Q大战宣判:腾讯获赔500"
android:textColor="@android:color/black"
android:textSize="17sp"/>
<TextView
android:id="@+id/tv_listview_item_detail"
android:layout_alignLeft="@id/tv_listview_item_title"
android:layout_below="@id/tv_listview_item_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="sdjsahdkjsahdkjsadhjksahdkj"
android:textColor="@android:color/darker_gray"
android:textSize="14sp"/>
<TextView
android:id="@+id/tv_listview_item_comment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:text="668跟帖"
android:textColor="@android:color/darker_gray"
android:textSize="14sp"/>
</RelativeLayout>

第三步:开始编写逻辑文件

packagecom.zaizai.news;importandroid.os.Handler;importandroid.os.Message;importandroid.support.v7.app.AppCompatActivity;importandroid.os.Bundle;importandroid.util.Log;importandroid.view.LayoutInflater;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.BaseAdapter;importandroid.widget.ListView;importandroid.widget.TextView;importandroid.widget.Toast;importcom.loopj.android.image.SmartImageView;importcom.zaizai.news.domain.NewsInfo;importorg.apache.http.HttpResponse;importorg.apache.http.client.HttpClient;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.impl.client.DefaultHttpClient;importorg.xmlpull.v1.XmlPullParser;importorg.xmlpull.v1.XmlPullParserFactory;importjava.io.IOException;importjava.io.InputStream;importjava.util.ArrayList;importjava.util.List;publicclassMainActivityextendsAppCompatActivity{privatestaticfinalStringTAG="MainActivity";privatefinalintSUCCESS=0;privatefinalintFAILED=1;privateListViewlvNews=null;privateList<NewsInfo>list=null;privateHandlerhandler=newHandler(){/*接受消息*/@OverridepublicvoidhandleMessage(Messagemsg){switch(msg.what){caseSUCCESS://访问成功/*将数据绑定到listView中*/list=(List<NewsInfo>)msg.obj;MyAdapermyAdaper=newMyAdaper();lvNews.setAdapter(myAdaper);break;caseFAILED://访问失败Toast.makeText(MainActivity.this,"当前网络崩溃了",Toast.LENGTH_LONG).show();break;default:break;}super.handleMessage(msg);}};@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();}privatevoidinit(){lvNews=(ListView)findViewById(R.id.lv_news);//抓取新闻数据/*创建一个线程进行数据下载*/newThread(newRunnable(){/*子线程不能修改UI界面的状态,可通过hander*/@Overridepublicvoidrun(){/*获得新闻信息集合*/List<NewsInfo>newInfList=getNewsFromInternet();/*newInflist==NUll时*/Messagemessage=newMessage();if(newInfList!=null){message.what=SUCCESS;message.obj=newInfList;}else{message.what=FAILED;}handler.sendMessage(message);}}).start();//绑定数据}/***返回新闻信息*/privateList<NewsInfo>getNewsFromInternet(){HttpClienthttpclient=null;try{/*定义一个httpClient客户端*/httpclient=newDefaultHttpClient();/*定义get方法*/HttpGetget=newHttpGet("http://192.168.9.1:8080/new.xml");/*执行请求方法*/HttpResponsehttpResponse=httpclient.execute(get);intstatusCode=httpResponse.getStatusLine().getStatusCode();if(statusCode==200){InputStreaminputStream=httpResponse.getEntity().getContent();List<NewsInfo>newsInfos=getNewsListFromInputStream(inputStream);returnnewsInfos;}else{Log.i(TAG,"访问失败:"+statusCode);}}catch(IOExceptione){e.printStackTrace();}catch(Exceptione){e.printStackTrace();}finally{if(httpclient!=null){/*关闭可释放资源*/httpclient.getConnectionManager().shutdown();}}returnnull;}/***从inputStream流中解析newlist**@paramis*@return*/privateList<NewsInfo>getNewsListFromInputStream(InputStreamis)throwsException{XmlPullParserFactoryfactory=XmlPullParserFactory.newInstance();//创建一个xmlpull解析器的工厂XmlPullParserparser=factory.newPullParser();parser.setInput(is,"UTF-8");inteventType=parser.getEventType();List<NewsInfo>infoList=null;NewsInfonewsInfo=null;while(eventType!=XmlPullParser.END_DOCUMENT){/*当未解析到文档的结尾处时*/StringtagName=parser.getName();//获得节点名称switch(eventType){caseXmlPullParser.START_TAG://<news>if("news".equals(tagName)){infoList=newArrayList<NewsInfo>();}elseif("new".equals(tagName)){newsInfo=newNewsInfo();}elseif("title".equals(tagName)&&newsInfo!=null){newsInfo.setTitle(parser.nextText());}elseif("detail".equals(tagName)&&newsInfo!=null){newsInfo.setDetail(parser.nextText());}elseif("comment".equals(tagName)&&newsInfo!=null){newsInfo.setComment(Integer.valueOf(parser.nextText()));}elseif("image".equals(tagName)&&newsInfo!=null){newsInfo.setImageUrl(parser.nextText());}break;caseXmlPullParser.END_TAG://</news>if("new".equals(tagName)&&newsInfo!=null){infoList.add(newsInfo);}default:break;}eventType=parser.next();//取下一个事件类型}returninfoList;}/*与ListView绑定*/classMyAdaperextendsBaseAdapter{@OverridepublicintgetCount(){/*litView列表的长度等于数据的大小*/returnlist.size();}/***返回类表子条目的布局*@paramposition*@paramconvertView*@paramparent*@return*/@OverridepublicViewgetView(intposition,ViewconvertView,ViewGroupparent){Viewview=null;if(convertView==null){LayoutInflaterinflater=getLayoutInflater();view=inflater.inflate(R.layout.listview_item,null);}else{view=convertView;}/*重新赋值,不会产生缓存对象中原有数据保留的现象*/SmartImageViewsivIcon=(SmartImageView)view.findViewById(R.id.siv_listvie_item_icon);TextViewtvTitle=(TextView)view.findViewById(R.id.tv_listview_item_title);TextViewtvDetail=(TextView)view.findViewById(R.id.tv_listview_item_detail);TextViewtvComment=(TextView)view.findViewById(R.id.tv_listview_item_comment);NewsInfonewsInfo=list.get(position);sivIcon.setImageUrl(newsInfo.getImageUrl());tvTitle.setText(newsInfo.getTitle());tvDetail.setText(newsInfo.getDetail());tvComment.setText(newsInfo.getComment()+"跟帖");returnview;}@OverridepublicObjectgetItem(intposition){returnnull;}@OverridepubliclonggetItemId(intposition){return0;}}@OverridepublicbooleanonCreateOptionsMenu(Menumenu){//Inflatethemenu;thisaddsitemstotheactionbarifitispresent.getMenuInflater().inflate(R.menu.menu_main,menu);returntrue;}@OverridepublicbooleanonOptionsItemSelected(MenuItemitem){//Handleactionbaritemclickshere.Theactionbarwill//automaticallyhandleclicksontheHome/Upbutton,solong//asyouspecifyaparentactivityinAndroidManifest.xml.intid=item.getItemId();//noinspectionSimplifiableIfStatementif(id==R.id.action_settings){returntrue;}returnsuper.onOptionsItemSelected(item);}}

:网络访问时不可使用localhost或者127.0.0.1,否则会抛出访问被拒绝的异常错误

在android studio中导入jar包,直接将jar包考诶到libs目录下,右键将其添加进去即可

更多相关文章

  1. Android(安卓)数据库SQLite的使用简单Demo
  2. Android教程之MediaStore
  3. Android各种访问权限Permission详解
  4. Android之Adapter用法总结
  5. Android(安卓)高手进阶教程(十三)之----Android(安卓)数据库SQLi
  6. Android联系人数据库全解析(1)
  7. 2010-03-03 传智播客—Android(五)数据存储之五网络数据交互
  8. Android(安卓)文件上传支持拍照录用录视频
  9. mybatisplus的坑 insert标签insert into select无参数问题的解决

随机推荐

  1. 《第一行代码--Android》读书笔记之UI篇
  2. Android(安卓)shap selector animation
  3. Android(安卓)资源文件中@、@android:typ
  4. Android世界的15款开源的游戏开发引擎
  5. Android(安卓)组件长宽比重设置总结
  6. 关于Android中xml布局文件之android 入门
  7. Android(安卓)Wear开发者预览配置过程
  8. android 电池(三):android电池系统
  9. android 异步处理
  10. 跟大家分享下Android布局文件layout.xml