|  | 
				
					
			  
	2013年6月18日
	
 
			
			
			http://blog.csdn.net/code__code/article/details/53885510
1. 使用Spring Security管理用户身份认证、登录退出 2. 用户密码加密及验证 3. 采用数据库的方式实现Spring Security的remember-me功能 4. 获取登录用户信息。 5.使用Spring Security管理url和权限 
			
			
			     摘要:         // 自定义登录页面          http.csrf().disable().formLogin().loginPage("/login")  //指定登录页的路径&n...  阅读全文 
			
			
			<bean id="jobDetail7"class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">                    <propertyname="targetObject" ref="billingBillTask"></property>                    <propertyname="targetMethod" value="executeInternal" />                    <propertyname="concurrent" value="false" />          </bean>          <beanid="billingBillTask"class="com.dangdang.tms.job.schedule.bms.BillingBillTask"/>          <beanid="cronTriggerBean7" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">                    <propertyname="jobDetail" ref="jobDetail7"></property>                    <propertyname="cronExpression" value="0/5 * * * * ?"></property>          </bean>
 参考 http://blog.csdn.net/lkforce/article/details/51841890
 
			
			
			 
为了解决一些比较费时且不是很紧要的任务,将此任务转为异步任务处理,提高前端操作体验。
spring 中 自带注解 @Async.
配置如下
applicationContext.xml 中 增加 task的引用
 
        
	
	
	  
如上配置之后,只需要在 需要进行异步调用的方法前面增加 注解就可以了。
	@Async
	public void updateOrderBillItemPQty(String deptId, String orderNo, Integer orderItemSid, Double pQty) {
注:需要注意,同一个对象里面方法调用,不会作为异步方法执行。
			 
			
			
			在对 TextView 或者 EditText 进行赋值时,调用setText()方法,一定要注意,使用String类型,不要使用int 或者long,否则 会出现找不到资源的异常。系统自动会将int作为一个资源ID,然后去R 里面找,结果找不到。
 
			
			
			     摘要: http://blog.csdn.net/meng425841867/article/details/8523730
在按键单击事件中添加创建对话框并设置相关属性。
       
[java] view plain copy 
dialogButton=(Button)findViewBy...  阅读全文 
			
			
			     摘要: http://daoshud1.iteye.com/blog/1874241
本文讲实现一个自定义列表的Android程序,程序将实现一个使用自定义的适配器(Adapter)绑定 数据,通过contextView.setTag绑定数据有按钮的ListView。 系统显示列表(ListView)时,首先会实例化一个适配器,本文将实例化一个自定义的适配器。实现 自定义适...  阅读全文 
			
			
			     摘要: http://blog.csdn.net/x605940745/article/details/11981049
SimpleAdapter的参数说明 第一个参数 表示访问整个android应用程序接口,基本上所有的组件都需要 第二个参数表示生成一个Map(String ,Object)列表选项 第三个参数表示界面布局的id  表示该文件作为列表项的组件&...  阅读全文 
			
			
			首先是布局文件,这里需要两个布局文件,一个是放置列表控件的Activity对应的布局文件 main.xml,另一个是ListView中每一行信息显示所对应的布局 list_item.xml 这一步需要注意的问题是ListView 控件的id要使用Android系统内置的 android:id="@android:id/list"  main.xml 
  <?xml version="1.0" encoding="utf-8"?> 
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:orientation="vertical" > 
  <ListView 
  android:id="@android:id/list" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:padding="20dip"/> 
  </LinearLayout> 
 list_item.xml
  <?xml version="1.0" encoding="utf-8"?> 
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:orientation="horizontal" > 
  
  <TextView 
  android:id="@+id/user_name" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:layout_weight="1"/> 
  <TextView 
  android:id="@+id/user_id" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:layout_weight="1"/> 
  </LinearLayout> 
 然后就设置MainActivity中的代码了:基本思想就是先将数据添加到ArrayList中,然后在设置SimpleAdapter适配器完成设置,入下:
  
  package com.example.android_newlistview; 
   
  import java.util.ArrayList; 
  import java.util.HashMap; 
  import java.util.Map; 
   
  import android.os.Bundle; 
  import android.app.Activity; 
  import android.app.ListActivity; 
  import android.view.Menu; 
  import android.widget.SimpleAdapter; 
   
   public class MainActivity extends ListActivity  { 
   
   
   String[] from=  {"name","id"}; //这里是ListView显示内容每一列的列名 
   int[] to=  {R.id.user_name,R.id.user_id}; //这里是ListView显示每一列对应的list_item中控件的id 
  
   String[] userName=  {"zhangsan","lisi","wangwu","zhaoliu"}; //这里第一列所要显示的人名 
   String[] userId=  {"1001","1002","1003","1004"}; //这里是人名对应的ID 
  
  ArrayList<HashMap<String,String>> list=null; 
  HashMap<String,String> map=null; 
  @Override 
   protected void onCreate(Bundle savedInstanceState)  { 
  // TODO Auto-generated method stub 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.main); //为MainActivity设置主布局 
  //创建ArrayList对象; 
  list=new ArrayList<HashMap<String,String>>(); 
  //将数据存放进ArrayList对象中,数据安排的结构是,ListView的一行数据对应一个HashMap对象, 
  //HashMap对象,以列名作为键,以该列的值作为Value,将各列信息添加进map中,然后再把每一列对应 
  //的map对象添加到ArrayList中 
  
   for(int i=0; i<4; i++)  { 
  map=new HashMap<String,String>(); //为避免产生空指针异常,有几列就创建几个map对象 
  map.put("id", userId[i]); 
  map.put("name", userName[i]); 
  list.add(map); 
  } 
  
  //创建一个SimpleAdapter对象 
  SimpleAdapter adapter=new SimpleAdapter(this,list,R.layout.list_item,from,to); 
  //调用ListActivity的setListAdapter方法,为ListView设置适配器 
  setListAdapter(adapter); 
  } 
  }另外对点击某一行作出响应的方法是覆写onListItemClick方法,根据返回的position(从0开始):
  @Override 
   protected void onListItemClick(ListView l, View v, int position, long id)  { 
  // TODO Auto-generated method stub 
  super.onListItemClick(l, v, position, id); 
  } 
			
			
			单数据{'singer':{'id':01,'name':'tom','gender':'男'}} 
多个数据{"singers":[ 
        {'id':02,'name':'tom','gender':'男'}, 
         {'id':03,'name':'jerry,'gender':'男'}, 
{'id':04,'name':'jim,'gender':'男'}, 
{'id':05,'name':'lily,'gender':'女'}]}           // 普通Json数据解析 
   private void parseJson(String strResult) { 
   try { 
  JSONObject jsonObj = new JSONObject(strResult).getJSONObject("singer"); 
  int id = jsonObj.getInt("id"); 
  String name = jsonObj.getString("name"); 
  String gender = jsonObj.getString("gender"); 
  tvJson.setText("ID号"+id + ", 姓名:" + name + ",性别:" + gender); 
   } catch (JSONException e) { 
  System.out.println("Json parse error"); 
  e.printStackTrace(); 
  } 
  } 
  //解析多个数据的Json 
   private void parseJsonMulti(String strResult) { 
   try { 
  JSONArray jsonObjs = new JSONObject(strResult).getJSONArray("singers"); 
  String s = ""; 
   for(int i = 0; i < jsonObjs.length() ; i++){ 
  JSONObject jsonObj = ((JSONObject)jsonObjs.opt(i)).getJSONObject("singer"); 
  int id = jsonObj.getInt("id"); 
  String name = jsonObj.getString("name"); 
  String gender = jsonObj.getString("gender"); 
  s +=  "ID号"+id + ", 姓名:" + name + ",性别:" + gender+ "\n" ; 
  } 
  tvJson.setText(s); 
   } catch (JSONException e) { 
  System.out.println("Jsons parse error !"); 
  e.printStackTrace(); 
  } 
  } 
			
			
			
          Button Btn1 = (Button)findViewById(R.id.button1);          Btn1.setOnClickListener(new Button.OnClickListener(){              public void onClick(View v) {                    String strTmp = "点击Button01";                    Ev1.setText(strTmp);                }              });   
           public void Btn3OnClick(View view){            String strTmp="点击Button03";          Ev1.setText(strTmp);        }  
  <Button          android:id="@+id/button3"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:text="Button3"           android:onClick="Btn3OnClick"/>  
 第三种方式 activity 实现 单击监听接口
 
 
 
publicclassTestButtonActivity extendsActivity implementsOnClickListener {
 Button btn1, btn2;
 Toast tst;
 @Override
 protectedvoidonCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_test_button);
 btn1 = (Button) findViewById(R.id.button1);
 btn2 = (Button) findViewById(R.id.button2);
 btn1.setOnClickListener(this);
 btn2.setOnClickListener(this);
 }
 @Override
 publicvoidonClick(View v) {
 
 switch(v.getId()) {
 caseR.id.button1:
 tst = Toast.makeText(this, "111111111", Toast.LENGTH_SHORT);
 tst.show();
 break;
 caseR.id.button2:
 tst = Toast.makeText(this, "222222222", Toast.LENGTH_SHORT);
 tst.show();
 break;
 default:
 break;
 }
 }
 }
 
 
 
 
			
			
			一、直接打开,不传递参数Intent intent = new Intent(this, Activity.class);startActivity(intent); 
 
 二、传递参数
   public void OpenNew(View v) { 
  //新建一个显式意图,第一个参数为当前Activity类对象,第二个参数为你要打开的Activity类 
  Intent intent =new Intent(MainActivity.this,MainActivity2.class); 
   
  //用Bundle携带数据 
  Bundle bundle=new Bundle(); 
  //传递name参数为tinyphp 
  bundle.putString("name", "tinyphp"); 
  intent.putExtras(bundle); 
   
  startActivity(intent);  //1.要关闭的页面 
   protected void onCreate(Bundle savedInstanceState)  { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.otheractivity); 
  Intent intent = this.getIntent(); 
  intent.putExtra("tel", 12345); 
  //设置requestCode和带有数据的intent对象 
  OtherActivity.this.setResult(3, intent); 
  //马上关闭Activity 
  this.finish(); 
  } 
   
  //2.上面的页面关闭时,此页面进行数据的接收 
   class ButtonListener implements android.view.View.OnClickListener  { 
  @Override 
   public void onClick(View arg0)  { 
  Intent intent = new Intent(); 
  intent.setClass(MainActivity.this, OtherActivity.class); 
  //与普通的start方法不同,需要设置requestCode 
  startActivityForResult(intent, 1); 
  } 
  } 
   
  //如果要进行此操作,需要在数据接收页面中复写activity的onActivityResul()方法 
  @Override 
   protected void onActivityResult(int requestCode, int resultCode, Intent data)  { 
  super.onActivityResult(requestCode, resultCode, data); 
  int tel = 0; 
  //根据返回码resultCode来判断下一步进行的业务代码 
   if(resultCode==3)  { 
  tel = data.getIntExtra("tel", 0); 
  } 
  Log.i(TAG, "tel--------->"+String.valueOf(tel)); 
  }
  }
 
 三、回传参数
 
			
			
			1、不同android 版本,需要设置不同的 sytle 文件。默认 通常我们会设置values下面的style 文件
 但是如果是4.0以上,则还需要设置values-v14下面的style文件。
 
 否则不能生效
 
			
			
			找了很多方案,都说是那个KB939373 这个补丁搞的,但是在添加删除里就是找不到这个东东,重装也没有用,后来找到了这篇文章http://www.cnblogs.com/skylaugh/archive/2011/07/21/2112860.html 根据这篇文章,我把infocomm.dll  给替换一下,然后就好了,简直就是坑爹啊。 这里讲讲需要注意的事项。 1、替换的文件通过iis安装文件生成,请看参考文章 2、文件直接黏贴覆盖,不要使用参考里面bat处理。 3、然后启动这个服务,启动iis,搞定
			 |