Android開發疑問與解答

疑問:Android界面刷新方法

Android 如果返回前面的Activity時能自動更新(刷新)

解答:

第一種方法:

引用函數 setResult和 onActivityResult處理機制

A窗體AActivity和B窗體BActivity,A進入B窗體,然後B窗體返回A窗體並要實現B窗體的界面更新

A窗體需要添加代碼:

  //切換到B窗體
  public void onClick(View v) {
    Intent intent = new Intent();
    intent.setClass(AActivity.this,BActivity.class);
    Bundle bundle = new Bundle();
    bundle.putString("uid", AActivity.this.toString());
    intent.putExtras(bundle);
    startActivityForResult(intent,GET_CODE);
   }

  //重構方法
  @Override   
  protected void onActivityResult(int requestCode, int resultCode, Intent data) 
  {   
	if(requestCode == GET_CODE)
	{  
	    }   
  }

B窗體需要添加代碼:

    //B窗體結束,返回A窗體
    @Override   
    public void onClick(View v) 
    {   
       setResult(RESULT_OK,(new Intent()).setAction(uid));   
       finish();   
    }

疑問:Android消息推送機制

Android經常需要APP程序與服務器同步最新數據,並通過聲音或者圖標提醒用戶,一般服務器與客戶端同步數據分兩種,第一種是客戶端使用Pull(拉)的模式,隔一段時間就去服務器上獲取信息,看是否有更新的信息出現。第二種就是 服務器使用Push(推送)的模式,當服務器端有新信息了,則把最新的信息Push到客戶端上。

如果能實現Push(推送)模式的話就最理想化,不需要客戶端定時的去監聽服務器的數據,省流量並且用戶體驗好。

解答:



疑問:Android文字或字體(Textview)加下劃線

比如登陸界面中的“忘記密碼”一般都有下劃線,怎麼添加?

解答:

有兩種方法:

1)textView.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG)

2)textView.setText(Html.fromHtml("<u>找回密碼</u>"))

第一種效果不好,會出現鋸齒狀的字體,還是採用第二種方法。


疑問:Android手機訪問IP地址的webservice網絡失敗

部署過一個webservice,但因爲沒有域名,所以地址就用IP地址組成,但很多手機訪問的時候出現網絡連接失敗。而且SDK低版本的可以訪問,高版本的不能連接。

android.os.NetworkOnMainThreadException

解答:

懷疑1:初步判斷應該是手機安全或管理軟件(91助手)屏蔽了IP地址形式訪問外網,或者從IP地址外網獲取數據

懷疑2:根據反饋情況,android4.0以上的訪問都有問題,所以懷疑調用webservice的開發包ksoap2-android-assembly-2.4-jar-with-dependencies.jar需要更新爲最新版本,版本有點老

懷疑3:android4.0系統不允許主線程(UI線程)訪問網絡

如:http://www.hicrm.com.cn/App/Component/InfoMgr/InfoPreview.aspx?idsType=idsView&idsID=20121110162334069529

 最終判斷是懷疑3的問題,所以在初始化界面加如下代碼就OK了:

       if (version >= 11){
           //android3.0後調用webservice需要加這段代碼
           StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()   
          .detectDiskReads()   
          .detectDiskWrites()   
          .detectNetwork()   // or .detectAll() for all detectable problems   
          .penaltyLog()   
          .build());   
          StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()   
          .detectLeakedSqlLiteObjects()   
          //.detectLeakedClosableObjects()   
          .penaltyLog()   
          .penaltyDeath()   
          .build()); 
       }



 疑問:Android界面緩衝

緩衝界面具有進入應用時判斷網絡、獲取平臺數據、展示logo等功能,因此在android應用中登陸之前使用圖片或者動畫做緩衝界面

解答:

public class AppStart extends Activity {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final View view = View.inflate(this, R.layout.start, null);
		setContentView(view);
        
		//漸變展示啓動屏
		AlphaAnimation aa = new AlphaAnimation(0.3f,1.0f);
		aa.setDuration(3000);
		view.startAnimation(aa);
		aa.setAnimationListener(new AnimationListener()
		{
			@Override
			public void onAnimationEnd(Animation arg0) {		
				redirectTo();
			}
			@Override
			public void onAnimationRepeat(Animation animation) {}
			@Override
			public void onAnimationStart(Animation animation) {

			}
			
		});
		
    }
    
    /**
     * 跳轉到...
     */
    private void redirectTo(){        
        Intent intent = new Intent(this, Login.class);
        startActivity(intent);
        finish();
    }
}


疑問:Android怎麼讀取硬件設備信息


解答:




作者:水煮魚
出處:http://blog.csdn.net/sheshou2/

發佈了163 篇原創文章 · 獲贊 62 · 訪問量 63萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章