㈠ android訪問網路數據的幾種方式Demo
Android應用經常會和伺服器端交互,這就需要手機客戶端發送網路請求,下面介紹四種常用網路請求方式,我這邊是通過Android單元測試來完成這四種方法的,還不清楚Android的單元測試的同學們請看Android開發技巧總結中的Android單元測試的步驟一文。
java.net包中的HttpURLConnection類
Get方式:
[java] view plainprint?
// Get方式請求
public static void requestByGet() throws Exception {
String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android";
// 新建一個URL對象
URL url = new URL(path);
// 打開一個HttpURLConnection連接
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
// 設置連接超時時間
urlConn.setConnectTimeout(5 * 1000);
// 開始連接
urlConn.connect();
// 判斷請求是否成功
if (urlConn.getResponseCode() == HTTP_200) {
// 獲取返回的數據
byte[] data = readStream(urlConn.getInputStream());
Log.i(TAG_GET, "Get方式請求成功,返回數據如下:");
Log.i(TAG_GET, new String(data, "UTF-8"));
} else {
Log.i(TAG_GET, "Get方式請求失敗");
}
// 關閉連接
urlConn.disconnect();
}
// Get方式請求
public static void requestByGet() throws Exception {
String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android";
// 新建一個URL對象
URL url = new URL(path);
// 打開一個HttpURLConnection連接
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
// 設置連接超時時間
urlConn.setConnectTimeout(5 * 1000);
// 開始連接
urlConn.connect();
// 判斷請求是否成功
if (urlConn.getResponseCode() == HTTP_200) {
// 獲取返回的數據
byte[] data = readStream(urlConn.getInputStream());
Log.i(TAG_GET, "Get方式請求成功,返回數據如下:");
Log.i(TAG_GET, new String(data, "UTF-8"));
} else {
Log.i(TAG_GET, "Get方式請求失敗");
}
// 關閉連接
urlConn.disconnect();
}
Post方式:
[java] view plainprint?
// Post方式請求
public static void requestByPost() throws Throwable {
String path = "https://reg.163.com/logins.jsp";
// 請求的參數轉換為byte數組
String params = "id=" + URLEncoder.encode("helloworld", "UTF-8")
+ "&pwd=" + URLEncoder.encode("android", "UTF-8");
byte[] postData = params.getBytes();
// 新建一個URL對象
URL url = new URL(path);
// 打開一個HttpURLConnection連接
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
// 設置連接超時時間
urlConn.setConnectTimeout(5 * 1000);
// Post請求必須設置允許輸出
urlConn.setDoOutput(true);
// Post請求不能使用緩存
urlConn.setUseCaches(false);
// 設置為Post請求
urlConn.setRequestMethod("POST");
urlConn.setInstanceFollowRedirects(true);
// 配置請求Content-Type
urlConn.setRequestProperty("Content-Type",
"application/x-www-form-urlencode");
// 開始連接
urlConn.connect();
// 發送請求參數
DataOutputStream dos = new DataOutputStream(urlConn.getOutputStream());
dos.write(postData);
dos.flush();
dos.close();
// 判斷請求是否成功
if (urlConn.getResponseCode() == HTTP_200) {
// 獲取返回的數據
byte[] data = readStream(urlConn.getInputStream());
Log.i(TAG_POST, "Post請求方式成功,返回數據如下:");
Log.i(TAG_POST, new String(data, "UTF-8"));
} else {
Log.i(TAG_POST, "Post方式請求失敗");
}
}
// Post方式請求
public static void requestByPost() throws Throwable {
String path = "https://reg.163.com/logins.jsp";
// 請求的參數轉換為byte數組
String params = "id=" + URLEncoder.encode("helloworld", "UTF-8")
+ "&pwd=" + URLEncoder.encode("android", "UTF-8");
byte[] postData = params.getBytes();
// 新建一個URL對象
URL url = new URL(path);
// 打開一個HttpURLConnection連接
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
// 設置連接超時時間
urlConn.setConnectTimeout(5 * 1000);
// Post請求必須設置允許輸出
urlConn.setDoOutput(true);
// Post請求不能使用緩存
urlConn.setUseCaches(false);
// 設置為Post請求
urlConn.setRequestMethod("POST");
urlConn.setInstanceFollowRedirects(true);
// 配置請求Content-Type
urlConn.setRequestProperty("Content-Type",
"application/x-www-form-urlencode");
// 開始連接
urlConn.connect();
// 發送請求參數
DataOutputStream dos = new DataOutputStream(urlConn.getOutputStream());
dos.write(postData);
dos.flush();
dos.close();
// 判斷請求是否成功
if (urlConn.getResponseCode() == HTTP_200) {
// 獲取返回的數據
byte[] data = readStream(urlConn.getInputStream());
Log.i(TAG_POST, "Post請求方式成功,返回數據如下:");
Log.i(TAG_POST, new String(data, "UTF-8"));
} else {
Log.i(TAG_POST, "Post方式請求失敗");
}
}
org.apache.http包中的HttpGet和HttpPost類
Get方式:
[java] view plainprint?
// HttpGet方式請求
public static void requestByHttpGet() throws Exception {
String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android";
// 新建HttpGet對象
HttpGet httpGet = new HttpGet(path);
// 獲取HttpClient對象
HttpClient httpClient = new DefaultHttpClient();
// 獲取HttpResponse實例
HttpResponse httpResp = httpClient.execute(httpGet);
// 判斷是夠請求成功
if (httpResp.getStatusLine().getStatusCode() == HTTP_200) {
// 獲取返回的數據
String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");
Log.i(TAG_HTTPGET, "HttpGet方式請求成功,返回數據如下:");
Log.i(TAG_HTTPGET, result);
} else {
Log.i(TAG_HTTPGET, "HttpGet方式請求失敗");
}
}
// HttpGet方式請求
public static void requestByHttpGet() throws Exception {
String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android";
// 新建HttpGet對象
HttpGet httpGet = new HttpGet(path);
// 獲取HttpClient對象
HttpClient httpClient = new DefaultHttpClient();
// 獲取HttpResponse實例
HttpResponse httpResp = httpClient.execute(httpGet);
// 判斷是夠請求成功
if (httpResp.getStatusLine().getStatusCode() == HTTP_200) {
// 獲取返回的數據
String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");
Log.i(TAG_HTTPGET, "HttpGet方式請求成功,返回數據如下:");
Log.i(TAG_HTTPGET, result);
} else {
Log.i(TAG_HTTPGET, "HttpGet方式請求失敗");
}
}
Post方式:
[java] view plainprint?
// HttpPost方式請求
public static void requestByHttpPost() throws Exception {
String path = "https://reg.163.com/logins.jsp";
// 新建HttpPost對象
HttpPost httpPost = new HttpPost(path);
// Post參數
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("id", "helloworld"));
params.add(new BasicNameValuePair("pwd", "android"));
// 設置字元集
HttpEntity entity = new UrlEncodedFormEntity(params, HTTP.UTF_8);
// 設置參數實體
httpPost.setEntity(entity);
// 獲取HttpClient對象
HttpClient httpClient = new DefaultHttpClient();
// 獲取HttpResponse實例
HttpResponse httpResp = httpClient.execute(httpPost);
// 判斷是夠請求成功
if (httpResp.getStatusLine().getStatusCode() == HTTP_200) {
// 獲取返回的數據
String result = EntityUtils.toString(httpResp.getEntity(), "UTF-8");
Log.i(TAG_HTTPGET, "HttpPost方式請求成功,返回數據如下:");
Log.i(TAG_HTTPGET, result);
} else {
Log.i(TAG_HTTPGET, "HttpPost方式請求失敗");
}
}
㈡ android studio怎麼導入demo
在Eclipse中新建android項目androiddemo。裡面只有一個MainActivity,主要是使用fastjson將一個Person對象轉化成字元串。在項目上點擊右鍵->Export。在彈出的Export窗口中選擇「Android」下面的Generate Gradle build files。然後點擊next。然後一路next,選中我們要導出的工程,繼續next。最後會提示將要導出的gradle文件的位置,然後點擊finish。打開Android Studio,點擊菜單欄的「File」->「Import Project 」。在彈框中選擇我們剛才導出的工程,然後點擊ok。
㈢ 如何成功運行SDL官方提供的Android平台的Demo
操作步驟:
第一步:准備SDL源代碼包;
1. 去官網下載最新版SDL2-2.0.3.tar.gz;
2. 解壓後,可以在根目錄下找到android-project目錄和README-android.txt,前者是一個一個Android工程模板,後者是關於如何使用該工程的文檔說明。
3. 調整目錄,使其成為一個可編譯的工程:
(1) 將android-project目錄剪切到與SDL2-2.0.3同級的目錄;
(2) 然後將SDL2-2.0.3目錄拷貝到android-project\jni目錄下,並重命名為SDL;
第二步:為SDL增加main函數
(1) 下載wiki.libsdl.org/Tutorials#Android.c文件;
(2) 下載之後將其放入android-project\jni\src目錄;
(3) 將main.c加入android-project\jni\src\Android.mk: 在Android.mk中默認有個YourSourceHere.c,將其替換為main.c即可;
第三步:編譯libSDL2.so和libmain.so
註:請確認NDK的bin目錄已經配置到環境變數PATH中去;
打開cmd命令窗口,進入到android-project目錄,然後執行"ndk-build"命令進行編譯。編譯成功後會在android-project根目錄下生成libs目錄,下面有各個平台的需要的這兩個so文件。
第四步:修改build target配置文件
默認的工程是使用的=android-12,必須使這個target與系統配置的一致,否則編譯會失敗. 具體的配置位於android-project/project.properties和android-project/default.properties中。由於adt-bundle-windows-x86_64-20130729.zip包對應的是android-18,因此需要將這兩個文件中的配置全部改為android-18.
第五步:導入Eclipse運行
依次選擇File->New->Android->Android Project from Existing Code,然後選擇android-project目錄將工程文件導入到Eclipse中。
然後選擇按照正常的Android工程運行即可。這個時候程序閃一下什麼都沒有,因為沒有添加資源。可下載一個bmp圖片放到android-project/assets中,這個目錄是由eclipse自動生成的。然後運行就可以看到通過SDL渲染出來的圖片了。
㈣ 如何設計android的登錄界面
在網上在到一個登錄界面感覺挺不錯的,給大家分享一下~先看效果圖:
這個Demo除了按鈕、小貓和Logo是圖片素材之外,其餘的UI都是通過代碼實現的。
?
一、背景
背景藍色漸變,是通過一個xml文件來設置的。代碼如下:
background_login.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:andro>
<gradient
android:startColor="#FFACDAE5"
android:endColor="#FF72CAE1"
android:angle="45"
/>
</shape>
startColor是漸變開始的顏色值,endColor是漸變結束的顏色值,angle是漸變的角度。其中#FFACDAE5中,FF是Alpha值,AC是RGB的R值,DA是RGB的G值,E5是RGB的B值,每個值在00~FF取值,即透明度、紅、綠、藍有0~255的分值,像要設置具體的顏色,可以在PS上的取色器上查看設置。
?
?
二、圓角白框
效果圖上面的並不是白框,其實框是白色的,只是設置了透明值,也是靠一個xml文件實現的。
background_login_div.xml
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:andro>
<solid android:color="#55FFFFFF" />
<!-- 設置圓角
注意: bottomRightRadius是左下角而不是右下角 bottomLeftRadius右下角-->
<corners android:topLeftRadius="10dp" android:topRightRadius="10dp"
android:bottomRightRadius="10dp" android:bottomLeftRadius="10dp"/>
</shape>
?
三、界面的布局
界面的布局挺簡單的,就直接貼代碼啦~
login.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:andro
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/background_login">
<!-- padding 內邊距 layout_margin 外邊距
android:layout_alignParentTop 布局的位置是否處於頂部 -->
<RelativeLayout
android:
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="15dip"
android:layout_margin="15dip"
android:background="@drawable/background_login_div_bg" >
<!-- 賬號 -->
<TextView
android:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="5dp"
android:text="@string/login_label_username"
/>
<EditText
android:
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/login_username_hint"
android:layout_below="@id/login_user_input"
android:singleLine="true"
android:inputType="text"/>
<!-- 密碼 text -->
<TextView
android:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/username_edit"
android:layout_marginTop="3dp"
android:text="@string/login_label_password"
/>
<EditText
android:
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/login_password_input"
android:password="true"
android:singleLine="true"
android:inputType="textPassword" />
<!-- 登錄button -->
<Button
android:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/password_edit"
android:layout_alignRight="@id/password_edit"
android:text="@string/login_label_signin"
android:background="@drawable/blue_button" />
</RelativeLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView android:
android:text="@string/login_register_link"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:textColor="#888"
android:textColorLink="#FF0066CC" />
<ImageView android:
android:src="@drawable/cat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_marginRight="25dp"
android:layout_marginLeft="10dp"
android:layout_marginBottom="25dp" />
<ImageView android:src="@drawable/logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/miniTwitter_logo"
android:layout_alignBottom="@id/miniTwitter_logo"
android:paddingBottom="8dp"/>
</RelativeLayout>
</LinearLayout>
㈤ Android注冊廣播有幾種方式,分別是什麼
注冊方式有兩種:
1、靜態注冊,就是在manifest文件里配置一下,這種方式注冊的廣播屬於系統級廣播。你的應用沒打開也能收到廣播。比如你要做一個收到某廣播就啟動你的應用的功能可以這樣搞。
2、動態注冊,在代碼里執行一個rigisterBroadcastReciver(可能拼寫有誤)的方法。這種你要自己作好反注冊。這種廣播可以做成你的應用啟動後才監聽,關閉後就不監聽的效果。
㈥ 如何在Android手機中開發QQ賬戶登陸功能
背景
OAUTH開發授權協議,為用戶資源的授權提供了一個安全開放而又簡易的標准。可以使用第三方的賬戶登陸另一個方的應用或服務,而不暴露給另一個應用該賬戶的信息。現在已經得到廣泛的應用,比如我們在互聯網上可以看到很多服務可以通過第三方賬號登錄,這樣既避免了用戶注冊的麻煩,也可以使用第三方的資源。
開發流程
一. QQ登錄目前採用OAuth2.0標准協議來進行用戶身份驗證和獲取用戶授權。整個流程如
下所述,這里比如一個應用A可以使用QQ賬戶登陸。
1. 用戶訪問客戶端的應用,試圖操作用戶存放在服務提供方的資源。比如用戶用QQ賬戶登
錄應用A程序,同時可以獲得用戶昵稱頭像等保存在騰訊伺服器的用戶信息。
2. 輸入QQ賬號後,應用A後向服務提供方(騰訊) (Request Token)。 請求一個臨時令
牌
3. 服務提供方(騰訊)(應用A)的身份後,授予一個臨時令牌。驗證客戶端
4. 客戶端(應用A)獲得臨時令牌後,將用戶引導至服務提供方(騰訊)的授權頁面請求用戶授
權。在這個過程中將臨時令牌和客戶端的回調連接發送給服務提供方(騰訊)。
5. 用戶在服務提供方(騰訊)的網頁上輸入用戶名和密碼,然後授權該客戶端(應用A)訪問所
請求的資源。
6. 授權成功後,服務提供方(騰訊)引導用戶返回到客戶端(應用A)提供的回調頁面。 7. 客戶端(應用A)根據臨時令牌從服務提供方(騰訊)那裡獲取訪問令牌 (Access Token)。 8. 根據訪問令牌 (Access Token)獲得對應用戶身份的openid,
9. 然後客戶端(應用A)根據訪問令牌 (Access Token)與openid調用OpenAPI,來請求訪問
或修改用戶授權的資源(比如昵稱用戶頭像等經過用戶授權的信息)。
10.拿到訪問令牌 (Access Token)之後,客戶端(應用A)可以保存起來,下次就不用再向服務
提供方(騰訊)請求授權,直接就可以使用該賬戶授權的資源,相當於保存了用戶名和密碼,但是真正的用戶名和密碼客戶端(應用A)並不知道。
比如一個信息發布的網站,可以使用QQ賬號登錄,用戶通過安全頁面輸入QQ賬號信息後顯示登陸成功,同時詢問用戶是否允許該網站使用用戶的一些信息,比如資料,相冊等,經過用戶確認後該網站可以拿到用戶授權的信息。同時拿到訪問令牌 (Access Token),以後該網站就可以用這個訪問獲得該用戶的這些授權信息,而不需要再次輸入賬戶信息。一般該網站也要提供刪除這個訪問令牌的入口。這樣就可以很方便的把用戶願意提供的信息拿到這個信息發布網站使用,而用戶不需要再次登記錄入。
二.QQ 為Android移動設備開發提供QQ登陸的開發包,對上述的過程進行的封裝,對開發者
來說可以方便的使用。要真正開發一個使用QQ賬戶登錄的App,就需要在騰訊社區開放平台注冊應用,申請對應的appid和appkey,這個開發App時候要用到。 1.可以在騰訊開放API站點下載最新的QQ登錄API庫文件和Demo。
2.下載後的Demo工程如下,導入了庫文件tencent_openap
㈦ 如何打開別人給的一個安卓開發demo
這本質上就是把源碼導入到安卓開發環境(一般是Android studio)中,然後編譯即可獲得可以安裝的apk文件。兩種方法。
第一種方法
1,首先自己創建一個新的android項目,選擇Empty Activity,一直選擇默認項
2,file->new->import mole
3.選擇模塊文件,點擊finish
4.點擊file->project Structure,
5,選中Moles下的app,注意這個app就是你自己new project的mole,下面這個huyubao就是我之前添加的,再選擇Dependencies
6.點擊+號,選中Mole dependency
7,選中之前導入的模塊,點擊ok
第二種方法
1,首先自己創建一個新的android項目,選擇Empty Activity,一直選擇默認項
2.點擊file->project Structure,
3.點擊左上方的+號,選擇import Gradle project,點擊next
4,選擇模塊文件
5,選中Moles下的app,注意這個app就是你自己new project的mole,下面這個huyubao就是我之前添加的,再選擇Dependencies
6.點擊+號,選中Mole dependency
7,選中之前導入的模塊,點擊ok