android学习 豆瓣 整体架构

这次的课程的架构不像上次的那么难 ,但是不能说不好,体现了简洁的智慧这是应该好好学习的

baseactivity:规范了一些需要的方法 初始化了重要的一些变量 初始化了一些控件

也可以在base中添加menu 按需添加

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		MenuInflater inflater = new MenuInflater(this);
		inflater.inflate(R.menu.main_tab_menu, menu);
		return super.onCreateOptionsMenu(menu);
	}






	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.main_tab_menu_clear_user:
			System.out.println("clear");
			SharedPreferences sp = getSharedPreferences("config", Context.MODE_PRIVATE);
			Editor editor = sp.edit();
			editor.putString("accesstoken", "");
			editor.putString("tokensecret", "");
			editor.commit();
			break;
		}
		return super.onOptionsItemSelected(item);
	}

baseactivity:


package cn.itcast.douban;

import com.google.gdata.client.douban.DoubanService;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.AnimationSet;
import android.view.animation.ScaleAnimation;
import android.widget.ImageButton;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

public abstract class  BaseActivity extends Activity {
	public TextView mTextViewTitle;
	public RelativeLayout mRelativeLoading;
	public DoubanService myService;
	public ImageButton mImageBack;
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		String apiKey = "0c51c1ba21ad8cfd24f5452e6508a6f7";
		String secret = "359e16e5e5c62b6e";

		myService = new DoubanService("黑马小瓣瓣", apiKey,
				secret);
		//密钥设置给myService
		SharedPreferences sp = getSharedPreferences("config", Context.MODE_PRIVATE);
		String accesstoken = sp.getString("accesstoken", "");
		String tokensecret = sp.getString("tokensecret", "");
		myService.setAccessToken(accesstoken, tokensecret);
		setupView();
		setListener() ;
		fillData();
	}
	public abstract void setupView();
	public abstract void setListener();
	public abstract void fillData();
	public  void showLoading(){
		mRelativeLoading.setVisibility(View.VISIBLE);
		AlphaAnimation aa = new AlphaAnimation(0.0f, 1.0f);
		aa.setDuration(1000);
		ScaleAnimation sa = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f);
		sa.setDuration(1000);
		AnimationSet set = new AnimationSet(false);
		set.addAnimation(sa);
		set.addAnimation(aa);
		mRelativeLoading.setAnimation(set);
		mRelativeLoading.startAnimation(set);
	}
	public  void hideLoading(){
		AlphaAnimation aa = new AlphaAnimation(1.0f, 0.0f);
		aa.setDuration(1000);
		ScaleAnimation sa = new ScaleAnimation(1.0f, 0.0f, 1.0f,0.0f);
		sa.setDuration(1000);
		AnimationSet set = new AnimationSet(false);
		set.addAnimation(sa);
		set.addAnimation(aa);
		mRelativeLoading.setAnimation(set);
		mRelativeLoading.startAnimation(set);
		mRelativeLoading.setVisibility(View.INVISIBLE);
	}
	
	public void showToast(String text){
		Toast.makeText(this, text, 0).show();
	}
	
}
获取信息的页面

package cn.itcast.douban;

import java.io.IOException;

import cn.itcast.douban.util.LoadImageAsynTask;
import cn.itcast.douban.util.LoadImageAsynTask.LoadImageAsynTaskCallback;

import com.google.gdata.data.Link;
import com.google.gdata.data.TextContent;
import com.google.gdata.data.douban.UserEntry;
import com.google.gdata.util.ServiceException;

import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AlphaAnimation;
import android.view.animation.AnimationSet;
import android.view.animation.ScaleAnimation;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class MyInfoActivity extends BaseActivity implements OnClickListener {
	private TextView tv_name;
	private TextView tv_location;
	private TextView tv_info;
	private ImageView iv_icon;
	String name ;
	String location ;
	String content ;
	String iconurl;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		//保证首先设置contentview 然后再去调用父类的方法
		setContentView(R.layout.my_info);
		super.onCreate(savedInstanceState);
		setupView();
		setListener();
		fillData();
		
	}

	@Override
	public void setupView() {
		tv_name= (TextView) this.findViewById(R.id.txtUserName);
		tv_location= (TextView) this.findViewById(R.id.txtUserAddress);
		tv_info= (TextView) this.findViewById(R.id.txtUserDescription);
		iv_icon = (ImageView)this.findViewById(R.id.imgUser);
		mRelativeLoading = (RelativeLayout) this.findViewById(R.id.loading);
		mTextViewTitle = (TextView) this.findViewById(R.id.myTitle);
		mImageBack = (ImageButton)this.findViewById(R.id.back_button);
	}

	@Override
	public void setListener() {
		mImageBack.setOnClickListener(this);

	}

	@Override
	public void fillData() {

		
		new AsyncTask<Void, Void, Void>() {

			
			//onPreExecute 在异步任务执行之前调用的方法 
			// 运行在主线程里面的 
			// 初始化ui的操作
			@Override
			protected void onPreExecute() {
				showLoading();
				super.onPreExecute();
			}
			// onPostExecute 在异步任务(后台任务)执行之后调用的方法 
			// 运行在ui线程中 , 
			// 
			@Override
			protected void onPostExecute(Void result) {
				hideLoading();
				super.onPostExecute(result);
				tv_info.setText(content);
				tv_location.setText(location);
				tv_name.setText(name);
				//设置用户的头像 
				LoadImageAsynTask task = new LoadImageAsynTask(new LoadImageAsynTaskCallback() {
					
					public void beforeLoadImage() {
						iv_icon.setImageResource(R.drawable.ic_launcher);
						
					}
					
					public void afterLoadImage(Bitmap bitmap) {
						if (bitmap!=null) {
							iv_icon.setImageBitmap(bitmap);
						}else{
							iv_icon.setImageResource(R.drawable.ic_launcher);
						}
						
					}
				});
				task.execute(iconurl);
				
				
			}
			// doInBackground 后台执行的任务 
			// 方法运行在一个子线程当中 
			@Override
			protected Void doInBackground(Void... params) {
				// 执行耗时的操作 
				try {
					UserEntry ue = myService.getAuthorizedUser();
					 name = ue.getTitle().getPlainText();
					 location = ue.getLocation();
					 content = ((TextContent) ue.getContent()).getContent().getPlainText();
						for (Link link : ue.getLinks()) {
							if("icon".equals(link.getRel())){
								iconurl = link.getHref();
							}
						}
				} catch (Exception e) {
					e.printStackTrace();
				}
				return null;
			}
		}.execute();
		
	}


	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.back_button:
			finish();
			break;

		}
		
	}

}



posted @ 2012-11-23 21:28  sfshine  阅读(304)  评论(0编辑  收藏  举报