android学习 豆瓣 整体架构

本文介绍了一个简洁高效的App框架设计,重点讲解BaseActivity类的作用及其实现方式,包括视图初始化、监听器设置和数据填充等关键步骤,并通过具体示例MyInfoActivity展示了如何使用此框架获取和展示用户信息。

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

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;

		}
		
	}

}



STM32电机库无感代码注释无传感器版本龙贝格观测三电阻双AD采样前馈控制弱磁控制斜坡启动内容概要:本文档为一份关于STM32电机控制的无传感器版本代码注释资源,聚焦于龙贝格观测器在永磁同步电机(PMSM)无感控制中的应用。内容涵盖三电阻双通道AD采样技术、前馈控制、弱磁控制及斜坡启动等关键控制策略的实现方法,旨在通过详细的代码解析帮助开发者深入理解基于STM32平台的高性能电机控制算法设计与工程实现。文档适用于从事电机控制开发的技术人员,重点解析了无位置传感器控制下的转子初始定位、速度估算与系统稳定性优化等问题。; 适合人群:具备一定嵌入式开发基础,熟悉STM32平台及电机控制原理的工程师或研究人员,尤其适合从事无感FOC开发的中高级技术人员。; 使用场景及目标:①掌握龙贝格观测器在PMSM无感控制中的建模与实现;②理解三电阻采样与双AD同步采集的硬件匹配与软件处理机制;③实现前馈补偿提升动态响应、弱磁扩速控制策略以及平稳斜坡启动过程;④为实际项目中调试和优化无感FOC系统提供代码参考和技术支持; 阅读建议:建议结合STM32电机控制硬件平台进行代码对照阅读与实验验证,重点关注观测器设计、电流采样校准、PI参数整定及各控制模块之间的协同逻辑,建议配合示波器进行信号观测以加深对控制时序与性能表现的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值