Android应用开发系列——星座达人①
来源:互联网 发布:淘宝评价怎么不能晒图 编辑:程序博客网 时间:2024/06/07 01:17
又是隔了好一阵子,这次带来的是当时写的一个应用——星座达人,提供一系列的综合服务,也就是脑子一热,就想写个星座题材的应用。
应用截图:
具体的内容,可以下载查看:http://www.anzhi.com/soft_2473845.html
项目工程结构
包com.eric.activity:放置一系列的Activity页面
AboutUsActivity关于页面,简单文本;
AboutUsActivity.java
package com.eric.activity;import com.eric.constellation.R;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RelativeLayout;/* *@author Eric *@2015-11-24下午9:57:07 */public class AboutUsActivity extends Activity{private LinearLayout layout_title_about;private ImageView image_back;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_about_us);layout_title_about = (LinearLayout) findViewById(R.id.layout_about);image_back = (ImageView) findViewById(R.id.image_about_back);layout_title_about.getBackground().setAlpha(70);image_back.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {finish();}});}}activity_about_us.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background= "@drawable/bg4" > <RelativeLayout android:id="@+id/layout_title_about" android:layout_width="fill_parent" android:layout_height="@dimen/activity_main_title_height" android:layout_alignParentTop="true" android:background="@drawable/title_bg"> <TextView android:id="@+id/text_title_about" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFF" android:text="关于" android:textSize="@dimen/activity_main_title_text_size" android:layout_centerInParent="true" android:gravity="center"/> <ImageView android:id="@+id/image_about_back" android:layout_width="50dp" android:layout_height="50dp" android:layout_alignParentLeft="true" android:background="@drawable/title_back_up_down" /> </RelativeLayout> <LinearLayout android:id="@+id/layout_about" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="20dp" android:padding="20dp" android:layout_below="@id/layout_title_about" android:background="@drawable/single_up_down" android:layoutAnimation="@anim/layout_animation" android:orientation="vertical"> <ImageView android:layout_width="150dp" android:layout_height="150dp" android:layout_gravity="center_horizontal" android:background="@drawable/aboutus"/> <TextView android:id="@+id/text_about_appname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:textSize="@dimen/activity_about_text" android:textColor="#FFF" android:text="@string/app_name" /> <TextView android:id="@+id/text_about_version" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:textSize="@dimen/activity_about_text" android:textColor="#FFF" android:text="@string/version_name" /> <TextView android:id="@+id/text_about_author" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:textSize="@dimen/activity_about_text" android:textColor="#FFF" android:text="@string/author" /> <TextView android:id="@+id/text_about_mail" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:textSize="@dimen/activity_about_text" android:textColor="#FFF" android:text="@string/mail" /> <TextView android:id="@+id/text_about_copyright" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:textSize="@dimen/activity_about_text" android:textColor="#FFF" android:text="@string/copyright" /> </LinearLayout> </RelativeLayout>
BottomMenuActivity下方弹出菜单页;
BottomMenuActivity.java自定义的一个下弹页面,当做对话框使用,计算积分,后续没有触发;
package com.eric.activity;import com.eric.constellation.R;import com.eric.test.AppConnect;import com.eric.test.UpdatePointsListener;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;/* *@author Eric *@2015-11-16下午7:25:28 */public class BottomMenuActivity extends Activity implements OnClickListener,UpdatePointsListener{private Button btn_next,btn_go;private TextView text,tips;private String info;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.bottom_menu);AppConnect.getInstance(this);btn_next = (Button) findViewById(R.id.btn_next);btn_go = (Button) findViewById(R.id.btn_go);text = (TextView) findViewById(R.id.text_point_info);tips = (TextView) findViewById(R.id.text_point_tips);info = "当前星币:"+MainActivity.point+"\n"+"消耗星币:"+MainActivity.cost;text.setText(info);btn_next.setOnClickListener(this);btn_go.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_next:finish();break;case R.id.btn_go:AppConnect.getInstance(this).showOffers(this);break;}}@Overridepublic void getUpdatePoints(String arg0, int arg1) {MainActivity.point = arg1;}@Overridepublic void getUpdatePointsFailed(String arg0) {}}
BudejieActivity百思不得姐页面,获取图片和文本页面列表,下拉刷新上拉加载;
BudejieActivity.java通过异步加载框架进行请求图片和文本数据并解析Json,头像随机更新列表项;
package com.eric.activity;import java.io.BufferedInputStream;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.URL;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Random;import org.apache.http.Header;import org.json.JSONArray;import org.json.JSONObject;import org.json.JSONTokener;import com.eric.constellation.R;import com.eric.mygifview.MyGifView;import com.eric.mylistview.MyListener;import com.eric.mylistview.PullToRefreshLayout;import com.loopj.android.http.AsyncHttpResponseHandler;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import com.eric.budejie.*;import android.app.Activity;import android.content.Context;import android.content.res.Resources;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.webkit.WebView;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;import android.widget.AdapterView.OnItemLongClickListener;/* *@author Eric *@2015-11-23上午9:37:45 */public class BudejieActivity extends Activity{public ImageLoader imageLoader = ImageLoader.getInstance();private ListView listView;private Drawable draw;private int currentPage = 1;private int currentList;private String result;private String name,create_time,love,hate,text,type,image0;private ArrayList<HashMap<String, Object>> dataList = new ArrayList<HashMap<String,Object>>(); private JSONObject contentObject = null;private MyAdapter adapter;public static MyHandler handler;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_budejie);((PullToRefreshLayout) findViewById(R.id.refresh_view)).setOnRefreshListener(new MyListener());listView = (ListView) findViewById(R.id.content_view);initListView();}private void initListView(){final AsyncHttpResponseHandler resHandler=new AsyncHttpResponseHandler(){public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable e) {//做一些异常处理e.printStackTrace();Toast.makeText(BudejieActivity.this, "网络异常", 0).show();}public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {try {//数据解析完添加到ListView//System.out.println("response is :"+new String(responseBody,"utf-8"));result = new String(responseBody,"utf-8");readJson(result);//System.out.println("解析到的数据:"+dataList);adapter = new MyAdapter(BudejieActivity.this, dataList);listView.setAdapter(adapter);currentList = listView.getCount();} catch (UnsupportedEncodingException e) {e.printStackTrace();}}};new ShowApiRequest( "http://route.showapi.com/255-1", "12672", "fe08f7b8ae3f4e3cb6855304fe96bbeb") .setResponseHandler(resHandler) .post();listView.setOnItemClickListener(new OnItemClickListener(){@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id){}});handler = new MyHandler();}//解析Json数据public void readJson(String str){try {JSONTokener jsonParser = new JSONTokener(str);JSONObject object = (JSONObject) jsonParser.nextValue();JSONObject bodyObject = object.getJSONObject("showapi_res_body");JSONObject pageObject = bodyObject.getJSONObject("pagebean");JSONArray contentArrary = pageObject.getJSONArray("contentlist");System.out.println("ContentArrary="+contentArrary.length());for (int i = 0; i < contentArrary.length(); i++) { HashMap<String,Object> map = new HashMap<String,Object>();contentObject = contentArrary.getJSONObject(i);type = contentObject.getString("type");name = contentObject.getString("name");create_time = contentObject.getString("create_time");love = contentObject.getString("love");hate = contentObject.getString("hate");text = contentObject.getString("text");switch (Integer.parseInt(type)) {case 10://图片image0 = contentObject.getString("image0");//is_gif = contentObject.getString("is_gif");map.put("image0", image0);map.put("name", name);map.put("create_time", create_time);map.put("love", love);map.put("hate", hate);map.put("text", text.trim());map.put("type", type); dataList.add(map);break;case 29://段子map.put("name", name);map.put("create_time", create_time);map.put("love", love);map.put("hate", hate);map.put("text", text.trim());map.put("type", type); dataList.add(map);break;case 31://声音break;case 41://视频break;}}} catch (Exception e) {System.out.println("解析Json异常:"+e);}}public class MyAdapter extends BaseAdapter { ArrayList<HashMap<String, Object>> dataList;Context context;public MyAdapter(Context context, ArrayList<HashMap<String, Object>> dataList) {this.context = context;this.dataList = dataList;}@Overridepublic int getCount() {return dataList.size();}@Overridepublic Object getItem(int position) {return dataList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {final View view = LayoutInflater.from(context).inflate(R.layout.layout_listview_item, null);String name = (String)dataList.get(position).get("name");String create_time = (String)dataList.get(position).get("create_time");String text = (String)dataList.get(position).get("text");String love = (String)dataList.get(position).get("love");String hate = (String)dataList.get(position).get("hate");String type = (String)dataList.get(position).get("type");switch (Integer.parseInt(type)) {case 10://图片String image0 = (String)dataList.get(position).get("image0");String gif = image0.substring(image0.lastIndexOf(".")+1, image0.length());DisplayImageOptions options=new DisplayImageOptions.Builder() //.showImageOnLoading(R.drawable.v)/*加载图片的时候显示正在加载的图*/ .showImageOnFail(R.drawable.menu_text_icon)/*加载图片失败后显示这个张图*/ .cacheInMemory(true)/*缓存至内存*/ //.cacheOnDisk(true)/*缓存值SDcard*/ .bitmapConfig(Bitmap.Config.RGB_565) .build();if(gif.equals("gif")){WebView wv = ((WebView)view.findViewById(R.id.WebView));wv.setBackgroundColor(0);wv.loadDataWithBaseURL(null,"<HTML><body bgcolor=transparent><div align=center>" +"<IMG src='"+image0+"'/></div></body></html>", "text/html", "UTF-8",null);wv.setVisibility(View.VISIBLE);}else{ImageView v = ((ImageView)view.findViewById(R.id.image_budejie_content));imageLoader.init(ImageLoaderConfiguration.createDefault(BudejieActivity.this));ImageLoader.getInstance().displayImage(image0,v,options);}break;case 29://段子break;case 31://声音break;case 41://视频break;}((TextView)view.findViewById(R.id.text_name)).setText(name);((TextView)view.findViewById(R.id.text_create_time)).setText(create_time);((TextView)view.findViewById(R.id.text_budejie_text)).setText(text);((TextView)view.findViewById(R.id.text_love)).setText(love);((TextView)view.findViewById(R.id.text_hate)).setText(hate);ImageView touxiang = (ImageView)view.findViewById(R.id.image_budejie_touxiang);randomDrawable(touxiang);touxiang.setImageDrawable(draw);return view;}}public void randomDrawable(ImageView touxiang){Random random = new Random();int n = random.nextInt(12);Resources resourses = this.getResources();switch (n) {case 0:draw = resourses.getDrawable(R.drawable.view1);break;case 1:draw = resourses.getDrawable(R.drawable.view2);break;case 2:draw = resourses.getDrawable(R.drawable.view3);break;case 3:draw = resourses.getDrawable(R.drawable.view4);break;case 4:draw = resourses.getDrawable(R.drawable.view5);break;case 5:draw = resourses.getDrawable(R.drawable.view6);break;case 6:draw = resourses.getDrawable(R.drawable.view7);break;case 7:draw = resourses.getDrawable(R.drawable.view8);break;case 8:draw = resourses.getDrawable(R.drawable.view9);break;case 9:draw = resourses.getDrawable(R.drawable.view10);break;case 10:draw = resourses.getDrawable(R.drawable.view11);break;case 11:draw = resourses.getDrawable(R.drawable.view12);break;}}public class MyHandler extends Handler{@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if(msg.arg1==1){System.out.println("刷新操作");final AsyncHttpResponseHandler resHandler1 = new AsyncHttpResponseHandler(){public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable e) {//做一些异常处理e.printStackTrace();Toast.makeText(BudejieActivity.this, "网络异常", 0).show();}public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {try {//数据解析完添加到ListView//System.out.println("response is :"+new String(responseBody,"utf-8"));result = new String(responseBody,"utf-8");readJson(result);//System.out.println("解析到的数据:"+dataList);adapter = new MyAdapter(BudejieActivity.this, dataList);listView.setAdapter(adapter);} catch (UnsupportedEncodingException e) {e.printStackTrace();}}};new ShowApiRequest( "http://route.showapi.com/255-1", "12672", "fe08f7b8ae3f4e3cb6855304fe96bbeb") .setResponseHandler(resHandler1) .addTextPara("page", "1") .post();}if(msg.arg2==2){System.out.println("加载操作");final AsyncHttpResponseHandler resHandler2 = new AsyncHttpResponseHandler(){public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable e) {//做一些异常处理e.printStackTrace();Toast.makeText(BudejieActivity.this, "网络异常", 0).show();}public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {try {//数据解析完添加到ListView//System.out.println("response is :"+new String(responseBody,"utf-8"));result = new String(responseBody,"utf-8");readJson(result);//System.out.println("解析到的数据:"+dataList);adapter = new MyAdapter(BudejieActivity.this, dataList);listView.setAdapter(adapter);listView.setSelection(currentList);currentList = listView.getCount();} catch (UnsupportedEncodingException e) {e.printStackTrace();}}};new ShowApiRequest( "http://route.showapi.com/255-1", "12672", "fe08f7b8ae3f4e3cb6855304fe96bbeb") .setResponseHandler(resHandler2) .addTextPara("page", Integer.toString(currentPage+1)) .post();currentPage+=1;}}}}
activity_budejie.xml不得姐页面布局文件
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background= "@drawable/bg4" > <RelativeLayout android:id="@+id/layout_title" android:layout_width="fill_parent" android:layout_height="50dp" android:layout_alignParentTop="true" android:background="@drawable/title_bg"> <TextView android:id="@+id/text_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFF" android:text="百思不得姐" android:textSize="@dimen/activity_main_title_text_size" android:layout_centerInParent="true" android:gravity="center"/> </RelativeLayout> <com.eric.mylistview.PullToRefreshLayout android:id="@+id/refresh_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/layout_title" > <include layout="@layout/layout_head_refresh" /> <com.eric.mylistview.PullableListView android:id="@+id/content_view" android:layout_width="match_parent" android:layout_height="match_parent" android:dividerHeight="1dp" /> <include layout="@layout/layout_head_load" /> </com.eric.mylistview.PullToRefreshLayout></RelativeLayout>
layout_listview_item.xml列表子项布局文件
<?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="match_parent" android:padding="5dp" ><RelativeLayout android:id="@+id/layout_budejie_head" android:layout_width="fill_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/image_budejie_touxiang" android:layout_width="30dp" android:layout_height="30dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:background="@drawable/view9"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/image_budejie_touxiang" android:layout_centerVertical="true" android:orientation="vertical"> <TextView android:id="@+id/text_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFF" android:textSize="10sp" android:text="EricFantastic"/> <TextView android:id="@+id/text_create_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFF" android:textSize="10sp" android:text="2015-11-23 16:52"/> </LinearLayout></RelativeLayout> <TextView android:id="@+id/text_budejie_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/layout_budejie_head" android:textColor="#FFF" android:textSize="18sp" android:text="hahahahahahhah"/> <ImageView android:id="@+id/image_budejie_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_below="@id/text_budejie_text" /> <WebView android:id="@+id/WebView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layerType="software" android:visibility="gone" android:layout_below="@id/image_budejie_content"/> <RelativeLayout android:id="@+id/layout_budejie_end" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/WebView"> <LinearLayout android:layout_width="fill_parent" android:layout_height="40dp" android:layout_centerVertical="true" android:orientation="horizontal"> <ImageView android:layout_width="20dp" android:layout_height="20dp" android:layout_gravity="center_vertical" android:background="@drawable/love"/> <TextView android:id="@+id/text_love" android:layout_width="wrap_content" android:layout_height="20dp" android:textColor="#FFF" android:layout_weight="1" android:layout_gravity="center_vertical" android:text="2220"/> <ImageView android:layout_width="20dp" android:layout_height="20dp" android:layout_gravity="center_vertical" android:background="@drawable/hate"/> <TextView android:id="@+id/text_hate" android:layout_width="wrap_content" android:layout_height="20dp" android:textColor="#FFF" android:layout_weight="1" android:layout_gravity="center_vertical" android:text="235"/> </LinearLayout></RelativeLayout></RelativeLayout>
ChatActivity小星问答页面,发送文本到指定API接口,返回响应数据;
ChatActivity.java类似于微信聊天页面,发送用户输入数据给API接口,返回响应数据更新页面。
package com.eric.activity;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Random;import org.json.JSONException;import org.json.JSONObject;import org.json.JSONTokener;import com.eric.constellation.R;import android.app.Activity;import android.content.Context;import android.content.res.Resources;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.view.WindowManager;import android.view.View.OnClickListener;import android.view.inputmethod.InputMethodManager;import android.widget.BaseAdapter;import android.widget.EditText;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;/* *@author Eric *@2015-11-21上午8:21:17 */public class ChatActivity extends Activity implements OnClickListener{public static final String DEF_CHATSET = "UTF-8";public static final int DEF_CONN_TIMEOUT = 30000;public static final int DEF_READ_TIMEOUT = 30000;public static String userAgent ="Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"; //配置您申请的KEY public static final String APPKEY ="c67cfd82f71f1e011c7c6d40c7e263bb";private ImageView image_voice,image_plus,image_send,image_chat_back;private EditText edit_chat;private Drawable img_userDrawable,img_friendDrawable;private String sendMsg,getMsg;public static ChatHandler handler;private ArrayList<HashMap<String, Object>> chatList = new ArrayList<HashMap<String,Object>>();String[] from = {"img","text"};int[] to = {R.id.image_me,R.id.text_me,R.id.image_friend,R.id.text_friend};int[] item_layout = {R.layout.i_sendmsg_item,R.layout.friend_sendmsg_item};private ListView listview_chat;private MyAdapter myAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);setContentView(R.layout.activity_chat);image_voice = (ImageView) findViewById(R.id.image_voice);image_plus = (ImageView) findViewById(R.id.image_plus);image_send = (ImageView) findViewById(R.id.image_send);image_chat_back = (ImageView) findViewById(R.id.image_chat_back);listview_chat = (ListView) findViewById(R.id.listview_chat);edit_chat = (EditText) findViewById(R.id.edit_chat);randomDrawable();image_chat_back.setOnClickListener(this);image_voice.setOnClickListener(this);image_plus.setOnClickListener(this);image_send.setOnClickListener(this);myAdapter = new MyAdapter(this, chatList, item_layout, from, to);listview_chat.setAdapter(myAdapter);listview_chat.setSelection(myAdapter.getCount()-1);handler = new ChatHandler();}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.image_chat_back:finish();break;case R.id.image_send:sendMessage();break;case R.id.image_voice:break;case R.id.image_plus:break;}}public void randomDrawable(){Random random = new Random();int n = random.nextInt(3);Resources resourses = this.getResources();Resources resourses2 = this.getResources();switch (n) {case 0:img_friendDrawable = resourses.getDrawable(R.drawable.view2);img_userDrawable = resourses2.getDrawable(R.drawable.view1);break;case 1:img_friendDrawable = resourses.getDrawable(R.drawable.view12);img_userDrawable = resourses2.getDrawable(R.drawable.view4);break;case 2:img_friendDrawable = resourses.getDrawable(R.drawable.view10);img_userDrawable = resourses2.getDrawable(R.drawable.view3);break;}}public void sendMessage(){sendMsg = edit_chat.getText().toString();if(sendMsg==null||sendMsg.trim().equals("")){edit_chat.setError("发送内容不能为空!");}else{//这里发送消息;Thread thread = new Thread(new Runnable() {@Overridepublic void run() {getMsg = getRequest(sendMsg);Message msg = new Message();Bundle b = new Bundle();b.putString("strObject", getMsg);msg.setData(b);handler.sendMessage(msg);}});thread.start();edit_chat.setText(null);addChatToListview(0, sendMsg);//将ListView设置为置底显示,自动刷新UI,使得消息及时显示listview_chat.setSelection(myAdapter.getCount()-1);}InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(edit_chat.getWindowToken(),0);}//获取机器人数据public static String getRequest(String info){ String result =null; String url ="http://op.juhe.cn/robot/index";//请求接口地址 Map<String, Object> params = new HashMap<String, Object>();//请求参数 params.put("key",APPKEY);//您申请到的本接口专用的APPKEY params.put("info",info);//要发送给机器人的内容,不要超过30个字符 params.put("dtype","json");//返回的数据的格式,json或xml,默认为json params.put("loc","");//地点,如北京中关村 params.put("lon","");//经度,东经116.234632(小数点后保留6位),需要写为116234632 params.put("lat","");//纬度,北纬40.234632(小数点后保留6位),需要写为40234632 params.put("userid","");//1~32位,此userid针对您自己的每一个用户,用于上下文的关联 try { result =net(url, params, "GET"); System.out.println("FUCK="+result); } catch (Exception e) { e.printStackTrace(); } return result; } //网络请求 public static String net(String strUrl, Map<String, Object> params,String method) throws Exception { HttpURLConnection conn = null; BufferedReader reader = null; String rs = null; try { StringBuffer sb = new StringBuffer(); if(method==null || method.equals("GET")){ strUrl = strUrl+"?"+urlencode(params); } URL url = new URL(strUrl); conn = (HttpURLConnection) url.openConnection(); if(method==null || method.equals("GET")){ conn.setRequestMethod("GET"); }else{ conn.setRequestMethod("POST"); conn.setDoOutput(true); } conn.setRequestProperty("User-agent", userAgent); conn.setUseCaches(false); conn.setConnectTimeout(DEF_CONN_TIMEOUT); conn.setReadTimeout(DEF_READ_TIMEOUT); conn.setInstanceFollowRedirects(false); conn.connect(); InputStream is = conn.getInputStream(); reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET)); String strRead = null; while ((strRead = reader.readLine()) != null) { sb.append(strRead); } rs = sb.toString(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { reader.close(); } if (conn != null) { conn.disconnect(); } } return rs; } //将map型转为请求参数型 public static String urlencode(Map<String, ?> data) { StringBuilder sb = new StringBuilder(); for (Map.Entry<String, ?> i : data.entrySet()) { try { sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return sb.toString(); } public class ChatHandler extends Handler{private Drawable draw;@Overridepublic void handleMessage(android.os.Message msg) {super.handleMessage(msg);Bundle b = msg.getData(); String strObjcet = b.getString("strObject"); try { JSONTokener jsonParser = new JSONTokener(getMsg); JSONObject object = (JSONObject) jsonParser.nextValue(); JSONObject resultObject = object.getJSONObject("result"); String result = resultObject.getString("text"); if(result != null){ addChatToListview(1, result); } } catch (JSONException e) { System.out.println("错误:"+e); e.printStackTrace(); }listview_chat.setSelection(myAdapter.getCount()-1);}}public void addChatToListview(int who,String chat){HashMap<String,Object> map = new HashMap<String,Object>();map.put("who", who);map.put("chat", chat);chatList.add(map);}public class MyAdapter extends BaseAdapter{Context context;ArrayList<HashMap<String,Object>> chatList= null;int[] layout;String[] from;int[] to;LayoutInflater listcontainer;public MyAdapter(Context context, ArrayList<HashMap<String, Object>> chatList, int[] layout, String[] from, int[] to){ super(); this.context = context; listcontainer = LayoutInflater.from(context); this.chatList = chatList; this.layout = layout; this.from = from; this.to = to;}@Overridepublic int getCount() {return chatList.size();}@Overridepublic Object getItem(int arg0) {return null;}@Overridepublic long getItemId(int ItemId) {return ItemId;}@Overridepublic View getView(int item, View view, ViewGroup parent) {//获取当前子项的who和chat int who = (Integer)chatList.get(item).get("who"); String msg = (String)chatList.get(item).get("chat"); //根据who设置当前子项的布局和文本,0为自己发送的布局,1为好友发送的布局 if(who==0) { view=listcontainer.inflate(R.layout.i_sendmsg_item, null); ((TextView)view.findViewById(R.id.text_me)).setText(msg); ((TextView)view.findViewById(R.id.text_me)).setTextColor(android.graphics.Color.BLUE); ((ImageView)view.findViewById(R.id.image_me)).setImageDrawable(img_userDrawable); ((TextView)view.findViewById(R.id.text_me)).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {//我发送消息文本点击事件}}); ((ImageView)view.findViewById(R.id.image_me)).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {//我头像点击事件}}); return view; } else { view=listcontainer.inflate(R.layout.friend_sendmsg_item, null); ((TextView)view.findViewById(R.id.text_friend)).setText(msg); ((TextView)view.findViewById(R.id.text_friend)).setTextColor(android.graphics.Color.BLUE); ((ImageView)view.findViewById(R.id.image_friend)).setImageDrawable(img_friendDrawable); ((TextView)view.findViewById(R.id.text_friend)).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {//好友消息文本点击事件}}); ((ImageView)view.findViewById(R.id.image_friend)).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {//好友头像点击事件}}); return view; } }}}
activity_chat.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background= "@drawable/bg4" > <RelativeLayout android:id="@+id/layout_title_chat" android:layout_width="fill_parent" android:layout_height="@dimen/activity_main_title_height" android:layout_alignParentTop="true" android:background="@drawable/title_bg"> <TextView android:id="@+id/text_title_chat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFF" android:text="小星问答" android:textSize="@dimen/activity_main_title_text_size" android:layout_centerInParent="true" android:gravity="center"/> <ImageView android:id="@+id/image_chat_back" android:layout_width="50dp" android:layout_height="50dp" android:layout_alignParentLeft="true" android:background="@drawable/title_back_up_down" /> </RelativeLayout> <ListView android:id="@+id/listview_chat" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="50dp" android:listSelector="@drawable/chatlist_item_up_down" android:layout_below="@id/layout_title_chat" android:divider="#aaaaaa" android:cacheColorHint="#0000" android:dividerHeight="0px" ></ListView> <RelativeLayout android:id="@+id/layout_chat_bottom" android:layout_width="fill_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" android:background="@drawable/title_bg" > <ImageView android:id="@+id/image_voice" android:layout_width="40dp" android:layout_height="40dp" android:layout_gravity="center_vertical" android:layout_marginLeft="5dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:background="@drawable/voice_up_down"/> <EditText android:id="@+id/edit_chat" android:layout_width="220dp" android:layout_height="40dp" android:layout_marginLeft="50dp" android:layout_centerVertical="true" android:inputType="text" android:background="@drawable/title_bg" android:textColor="#FFF" /> <ImageView android:id="@+id/image_plus" android:layout_width="40dp" android:layout_height="40dp" android:layout_gravity="center_vertical" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="50dp" android:background="@drawable/plus_up_down"/> <ImageView android:id="@+id/image_send" android:layout_width="40dp" android:layout_height="40dp" android:layout_gravity="center_vertical" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="5dp" android:background="@drawable/send_up_down"/> </RelativeLayout></RelativeLayout>i_sendmsg_item.xml
<?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="match_parent" android:orientation="vertical" android:paddingLeft="50dp" android:paddingRight="8dp" android:paddingTop="10dp" android:paddingBottom="10dp" > <ImageView android:id="@+id/image_me" android:layout_width="40dp" android:layout_height="40dp" android:layout_marginLeft="5dp" android:layout_alignParentRight="true" /> <TextView android:id="@+id/text_me" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="center_vertical" android:textSize="18sp" android:textStyle="bold" android:layout_toLeftOf="@id/image_me" android:background="@drawable/i_chat_bg_up_down" /> </RelativeLayout>
friend_sendmsg_item.xml
<?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="match_parent" android:orientation="vertical" android:paddingLeft="8dp" android:paddingRight="50dp" android:paddingTop="10dp" android:paddingBottom="10dp" > <ImageView android:id="@+id/image_friend" android:layout_width="40dp" android:layout_height="40dp" android:layout_marginRight="5dp" android:layout_alignParentLeft="true" /> <TextView android:id="@+id/text_friend" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="center_vertical" android:textSize="18sp" android:textStyle="bold" android:layout_toRightOf="@id/image_friend" android:background="@drawable/friend_chat_up_down" /> </RelativeLayout>
ConstellationMatchActivity星座配对页面,自定义滚轮控件,跳转数据页面;
ConstellationSecretActivity星座揭秘页面,简单文本;
ConstellationWallActivity星座壁纸页面,添加自定义动画及轮播图片预览效果;
HelpActivity帮助页面,简单文本;
JokeActivity笑话大全页面,获取笑话数据显示列表,下拉刷新上拉加载;
LuckActivity本日星座运势页面,请求当日星座运势数据;
LuckMonthActivity本月星座运势页面,请求本月星座运势数据;
LuckNextWeekActivity下周星座运势页面,请求下周星座运势数据;
LuckTomoActivity明日星座运势页面;
LuckWeekActivity本周星座运势页面;
LuckYearActivity本年星座运势页面;
MainActivity主界面,标题、fragment容器及tab选项;
StartActivity启动页面,随机图片;
TalkActivity星座物语页面,简单文本;
TestActivity性格测试页面,根据选项返回测试结果;
目前发现这么写,会占用大量的篇幅,下面一段时间会对项目进行拆分,形成链接,方便读者查看。
- Android应用开发系列——星座达人①
- Android应用开发系列——目录
- Android应用开发系列(1)——Eclipse环境搭建
- Android应用开发系列(2)——HelloWorld, APK生成
- Android应用开发提高系列——Activity生命周期
- Android应用开发提高系列(3)——《Effective Java 中文版》读书笔记
- Android应用开发提高系列(1)——《Practical Java 中文版》读书笔记(上)
- Android应用开发提高系列(2)——《Practical Java 中文版》读书笔记(下)
- Android应用开发提高系列(3)——《Effective Java 中文版》读书笔记
- Android应用开发提高系列(1)——《Practical Java 中文版》读书笔记(上)
- Android应用开发提高系列(2)——《Practical Java 中文版》读书笔记(下)
- Android应用开发提高系列(3)——《Effective Java 中文版》读书笔记
- Android应用开发提高系列(2)——《Practical Java 中文版》读书笔记(下)
- Android应用开发提高系列(1)——《Practical Java 中文版》读书笔记(上)
- Android应用开发提高系列(1)——《Practical Java 中文版》读书笔记(上)
- Android应用开发提高系列 Activity生命周期
- Android开发系列之性格测试应用
- [Android开发系列]IT博客应用
- Scala传名参数(By-Name)
- 为<hr>添加样式
- Hdu 2042(水题)之解题报告
- 单例模式的七种写法
- Ubuntu下为AndroidStudio编译并使用x264(一)ndk部分
- Android应用开发系列——星座达人①
- iOS 触摸事件五:手势处理器
- String Date Calendar之间的转换
- 处理动态类型的方法
- C++小题(三)
- 手动导入AFNetwork报错
- 科技和互联网公司2015年在美国上市融资95亿美元
- SpringMVC框架中jsp页面引用的js,css,html文件在运行时出现404错误
- invalidate()和postInvalidate() 的区别