Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android--全局獲取Context的技巧

Android--全局獲取Context的技巧

編輯:關於Android編程

Android中很多地方都會用到Context,彈出Toast的時候需要、啟動活動時需要、發送廣播的時候也需要、操作數據庫的時候需要、使用通知的時候也需要等等等。

或許你現在還沒有為得不到Context而發愁,因為現在我們的很多操作都是在活動中進行的,而活動本身就是一個Context對象。但是,當應用程序的框架逐漸開始復雜起來的時候,很多的邏輯代碼都將脫離Activity類,但此時你又恰恰需要使用Context,也許這個時候你就會感到有些傷腦筋了。

舉個例子,這裡我們編寫了一個HttpUtil類,將一些通用的網絡操作封裝起來:

package org.lxh.demo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;





public class HttpUtil {
	public static  void sendHttpRequest(final String address,final HttpCallbackListener listener){
		new Thread(new Runnable() {
			
			public void run() {
				try {
					HttpURLConnection connection=null;
					URL url=new URL(address);
					connection=(HttpURLConnection)url.openConnection();
					connection.setRequestMethod(GET);
					connection.setConnectTimeout(8000);
					connection.setReadTimeout(8000);
					connection.setDoInput(true);
					connection.setDoOutput(true);
					InputStream inputStream=connection.getInputStream();
					BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));
					StringBuilder response=new StringBuilder();
					String line;
					while ((line=reader.readLine())!=null) {
						response.append(line);
						
					}
					if(listener!=null){
						listener.onFinish(response.toString());
					}
				} catch (Exception e) {
					if(listener!=null){
						listener.onError(e);
					}
					
				} finally{
					if(connection!=null){
						connection.disconnection();
					}
				}
				
				
			}
		}).start();
		
	}

}


這裡可以使用sendHttpRequest()來發送Http請求,但是我假如我們想對sendHttpRequest()方法進行一些優化,當檢測到網絡不存在的時候就給用戶一個Toast提示,並不再執行後面的代碼。這裡卻讓我們遇到了一個問題,彈出的Toast提示需要一個Context參數,而我們在HttpUtil類中顯然是獲取不到Context對象的,怎麼辦呢?

其實這個問題經常會遇到,我們怎麼解決呢?這裡我們介紹一種技巧,讓你在項目的任何地方都能輕易的獲取到Context。Android提供了 一個Application類,以便於管理程序內一些全局的狀態信息,比如全局的Context。定制一個自己的Application,首先我們需要創建一個MyApplication類繼承自Application,如下:

package org.lxh.demo;

import android.app.Application;
import android.content.Context;

public class MyApplication extends Application {
	private static Context context;
	@Override
	public void onCreate() {
		context=getApplicationContext();
	}
	public static Context getContext(){
		return context;
	}

}


接下來我們需要告知系統,在程序啟動的時候應該初始化MyApplication 類,而不是默認的Application類,在AndroidManifest.xml文件中的標簽下進行指定:



android:name=org.lxh.demo.MyApplication


 

這樣以後在項目的任何地方使用Context,只需要調用一下MyApplication.getContext()就可以了:

Toast.makeText(MyApplication.getContext(),message,Toast.LENGTH_SHORT).show();

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved