導航:首頁 > 操作系統 > androidobservable

androidobservable

發布時間:2022-08-02 22:29:32

㈠ observablescrollview是哪個包的

主要代碼片段:(後面會有解釋)

import android.content.res.TypedArray;

import android.graphics.Color;

import android.os.Bundle;

import android.support.v7.app.ActionBarActivity;

import android.support.v7.widget.Toolbar;

import android.util.TypedValue;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.TextView;

import com.nineoldandroids.view.ViewHelper;

public class MainActivity extends ActionBarActivity implements ObservableScrollViewCallbacks{

private static final float MAX_TEXT_SCALE_DELTA = 0.3f;

private static final boolean TOOLBAR_IS_STICKY = true;

private View mToolbar;

private View mImageView;

private View mOverlayView;

private ObservableScrollView mScrollView;

private TextView mTitleView;

private View mFab;

private int mActionBarSize;

private int mFlexibleSpaceShowFabOffset;

private int mFlexibleSpaceImageHeight;

private int mToolbarColor;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

setSupportActionBar((Toolbar) findViewById(R.id.toolbar));

mFlexibleSpaceImageHeight = getResources().getDimensionPixelSize(R.dimen.flexible_space_image_height);

mActionBarSize = getActionBarSize();

mToolbarColor = getResources().getColor(R.color.primary);

mToolbar = findViewById(R.id.toolbar);

if (!TOOLBAR_IS_STICKY) {

mToolbar.setBackgroundColor(Color.TRANSPARENT);

}

mImageView = findViewById(R.id.image);

mOverlayView = findViewById(R.id.overlay);

mScrollView = (ObservableScrollView) findViewById(R.id.scroll);

mScrollView.setScrollViewCallbacks(this);

mTitleView = (TextView) findViewById(R.id.title);

mTitleView.setText(getTitle());

setTitle(null);

ScrollUtils.addOnGlobalLayoutListener(mScrollView, new Runnable() {

@Override

public void run() {

mScrollView.scrollTo(0, mFlexibleSpaceImageHeight - mActionBarSize);

}

});

}

㈡ rxjava 用到了android的事件隊列了嗎

一個詞:非同步
rxJava在github主頁上的介紹是
"a library for composing asynchronous and event-based programs using observable sequences for the Java VM"
大概的意思就是一個在 Java VM 上使用可觀測的序列來組成非同步的、基於事件的程序的庫。
其實rxJava的本質就是一個詞,非同步,它就是一個非同步操作的庫。
二、rxJava的好處
簡潔
非同步操作的比較關鍵的一點就是程序的簡潔,在調用復雜的非同步操作的時候,代碼回顯得很復雜,不僅難寫也很難懂。雖然android 創造的asynTask和handler 都是為了讓代碼更加簡潔。
rxJava的優勢在於,隨著程序邏輯越來越復雜,代碼依然很清晰
三、rxJava的基本原理
rxJava實現非同步,是通過擴展觀察者模式來實現的。
首先,講述下,觀察者模式
觀察者模式即是,a對象對b對象的某一個動作特別關注,做著密切的觀察,當a對象做出了這個動作的時候,b對象立刻做出相應的處理。就好比android中的點擊事件(onClickListener),

onClickListener.jpg
當button按鈕被點擊的時候,觀察者對這個點擊事件做出自己的反應
轉變為通用的觀察者模式如下:

rxJava.jpg
observable被觀察者,在做出某一事件的時候,通知observer觀察者做出處理
RxJava使用的就是通用型的觀察者模式。
RxJava觀察者模式
rxJava有四個基本概念,observable(可觀察者、被觀察者)、observer(觀察者)、subscrib(訂閱)。
observable和observer通過subscrib實現訂閱的關系,在observable需要的時候,發送通知給observer。
和傳統的觀察者模式不同,rxJava的回調事件除了onNext事件意外(相當於onClick,Onevent事件),還定義了兩個特殊的事件:onCompleted()、onError()
onCompleted():事件結束觸發。rxJava不僅僅將事件單獨處理,還會把他們作為一個隊列,在沒有onNext()事件觸發的時候,通過調用omCompleted()作為結束
onError():事件隊列異常觸發。當事件隊列發生異常的時候調研onError(),同時事件隊列停止,不執行任何事件了。
在隊列事件中,onCompleted()和onError()是相互對立的,兩者正常只會有一個調用。

㈢ android udp接收不到數據

1、可先在oncreate()方法裡面實例化一個WifiManager.MulticastLock 對象lock;具體如下:
WifiManager manager = (WifiManager) this
.getSystemService(Context.WIFI_SERVICE);
WifiManager.MulticastLock lock= manager.createMulticastLock("test wifi");

2、在調用廣播發送、接收報文之前先調用lock.acquire()方法;
3、用完之後及時調用lock.release()釋放資源,否決多次調用lock.acquire()方法,程序可能會崩,詳情請見
Caused by: java.lang.UnsupportedOperationException: Exceeded maximum number of wifi locks
注;記得在配置文件裡面添加如下許可權:
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />

經過這樣處理後,多數手機都能正常發送接收到廣播報文。
本小點轉載自Android手機接收不到UDP報文
二、在UDP通信中,android端發送UDP廣播包沒有問題。至於接收的話,有時候不能接收到包。
在UDP通信中,android端發送UDP廣播包沒有問題。至於接收的話,有時候不能接收到包。但是如果UDP包中指定了目標主機的地址的話,那麼android端就能正常接收。
下面上一段代碼,大家可用這段代碼進行測試。
1、在一個Service裡面,我們創建一個線程

public void onCreate() {//用於創建線程
WifiManager manager = (WifiManager) this
.getSystemService(Context.WIFI_SERVICE);
udphelper = new UdpHelper(manager);

//傳遞WifiManager對象,以便在UDPHelper類裡面使用MulticastLock
udphelper.addObserver(MsgReceiveService.this);
tReceived = new Thread(udphelper);
tReceived.start();
super.onCreate();
}

2、弄一個UDP幫助類,這個類主要用於發送和接收數據

package com.example.com.ihome.bang.util;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Observable;
import com.example.com.ihome.bang.tool.SendThread;
import android.net.wifi.WifiManager;
import android.util.Log;

/**
*
* UdpHelper幫助類
*
* @author 陳喆榕
*
*/
public class UdpHelper implements Runnable {
public Boolean IsThreadDisable = false;//指示監聽線程是否終止
private static WifiManager.MulticastLock lock;
InetAddress mInetAddress;
public UdpHelper(WifiManager manager) {
this.lock= manager.createMulticastLock("UDPwifi");
}
public void StartListen() {
// UDP伺服器監聽的埠
Integer port = 8903;
// 接收的位元組大小,客戶端發送的數據不能超過這個大小
byte[] message = new byte[100];
try {
// 建立Socket連接
DatagramSocket datagramSocket = new DatagramSocket(port);
datagramSocket.setBroadcast(true);
DatagramPacket datagramPacket = new DatagramPacket(message,
message.length);
try {
while (!IsThreadDisable) {
// 准備接收數據
Log.d("UDP Demo", "准備接受");
this.lock.acquire();

datagramSocket.receive(datagramPacket);
String strMsg=new String(datagramPacket.getData()).trim();
Log.d("UDP Demo", datagramPacket.getAddress()
.getHostAddress().toString()
+ ":" +strMsg );this.lock.release();
}
} catch (IOException e) {//IOException
e.printStackTrace();
}
} catch (SocketException e) {
e.printStackTrace();
}

}
public static void send(String message) {
message = (message == null ? "Hello IdeasAndroid!" : message);
int server_port = 8904;
Log.d("UDP Demo", "UDP發送數據:"+message);
DatagramSocket s = null;
try {
s = new DatagramSocket();
} catch (SocketException e) {
e.printStackTrace();
}
InetAddress local = null;
try {
local = InetAddress.getByName("255.255.255.255");
} catch (UnknownHostException e) {
e.printStackTrace();
}
int msg_length = message.length();
byte[] messageByte = message.getBytes();
DatagramPacket p = new DatagramPacket(messageByte, msg_length, local,
server_port);
try {

s.send(p);
s.close();

} catch (IOException e) {
e.printStackTrace();
}
}

@Override
public void run() {
StartListen();
}
}

希望能幫到你。

㈣ 有一個數據類型Result,如何使用Observable方法從http的get請求里取得並返回給調用的那一個組件

一、HTTP請求概述 在前面有一篇文章對HTTP協議有詳細的描述,這里就不再過多的做說明,只是簡單的作為這篇文章的引子。 HTTP協議又被稱為超文本傳輸協議,它的的設計目的是保證客戶機與伺服器之間的通信。HTTP 的工作方式是客戶端與伺服器之間的請求-應答協議。在客戶端和伺服器之間進行請求-響應時,有兩個最基本的請求方式:GET 和 POST。 其中,GET請求表示從指定的資源請求數據,POST請求表示向指定的資源提交要被處理的數據。 二、HTTP請求格式 在HTTP請求中,首先是請求行,注意這里的請求行一定要放在最前面;其次,是請求頭,英文表示為header;然後會空一行,緊接著就可以是請求的具體內容了,一般稱之為請求體,request-body。給出一個圖示如下: 三、GET請求與POST請求對比 GET請求與POST請求有一些異同點,主要有以下幾點問題: (一)、GET請求和POST請求都是客戶端與伺服器之間交互,請求--應答模式的協議 (二)、GET請求是通過URL直接請求數據,數據信息可以在URL中直接看到,比如瀏覽器訪問;而POST請求是放在請求頭中的,我們是無法直接看到的; (三)、GET提交有數據大小的限制,一般是不超過一0二四個位元組,而這種說法也不完全准確,HTTP協議並沒有設定URL位元組長度的上限,而是瀏 覽器做了些處理,所以長度依據瀏覽器的不同有所不同;POST請求在HTTP協議中也沒有做說明,一般來說是沒有設置限制的,但是實際上瀏覽器也有默認 值。總體來說,少量的數據使用GET,大量的數據使用POST。 (四)、GET請求因為數據參數是暴露在URL中的,所以安全性比較低,比如密碼是不能暴露的,就不能使用GET請求;POST請求中,請求參數信息是放在請求頭的,所以安全性較高,可以使用。在實際中,涉及到登錄操作的時候,盡量使用HTTPS請求,安全性更好。 下面給出一副圖示,說明一下HTTP中GET與POST請求的差異: 四、使用步驟: 在Android中使用HTTP請求,主要步驟如下: (一)、實例化一個HttpGet(或HttpPost)對象,將請求的URL地址通過構造方法傳給HttpGet(或HttpPost)對象; (二)、使用DefaultHttpClient類的execute方法發送GET或POST 請求,並返回HttpResponse對象; (三)、通過HttpResponse介面的getEntity方法返回響應信息。 5、實例代碼 給出一個在實際應用中的一個POST請求的代碼片段: [java] view plain print? params = new LinkedList(); params.add(new BasicNameValuePair("param一", "Post方法")); params.add(new BasicNameValuePair("param二", "第二個參數")); try { HttpPost post = new HttpPost(baseUrl); post.setEntity(new UrlEncodedFormEntity(params, "utf-吧")); //將參數填入POST Entity中 HttpResponse response = httpClient.execute(post); //執行POST方法 resCode = response.getStatusLine().getStatusCode()); //獲取響應碼 result = EntityUtils.toString(response.getEntity(), "utf-吧")); //獲取響應內容 } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } 陸、HTTP請求狀態碼意義 HTTP請求中,主要有這樣幾個類型:一XX:表示信息提示,二XX:表示成功,三XX:表示重定向,四XX:表示客戶端請求錯誤,5XX:表示伺服器錯誤。常見的幾個HTTP請求狀態碼意義如下: 二00 OK: 找到了該資源,並且一切正常。 三0四 NOT MODIFIED: 該資源在上次請求之後沒有任何修改。這通常用於瀏覽器的緩存機制。 四0一 UNAUTHORIZED: 客戶端無權訪問該資源。這通常會使得瀏覽器要求用戶輸入用戶名和密碼,以登錄到伺服器。 四0三 FORBIDDEN: 客戶端未能獲得授權。這通常是在四0一之後輸入了不正確的用戶名或密碼。 四0四 NOT FOUND: 在指定的位置不存在所申請的資源。 505 NOT SUPPORTED:伺服器不支持請求中所指明的HTTP版

㈤ android app開發中常用到哪些開源框架

在前面的課程中,隨著對Android體系的了解,已經可以進行正常的Android應用開發了。在Android開發中,同其他工程開發一樣,也經常使用一些提高效率的框架,本文我們做一個對比。這些框架,既包括:網路請求框架、也包括圖片載入庫框架、還包括資料庫操作等一些框架,總之,了解和熟悉這些框架,會對自己的開發效率有很大的提升和幫助。

網路請求框架

1、okHttp

在前文的學習中,我們已經了解過okHttp,是一個常用的網路載入庫。

2、Retrofit

介紹

Retrofit是一個很不錯的網路請求庫,該庫是square開源的另外一個庫,之前的okhttp也是該公司開源的。

Retrofit是基於OkHttp封裝的RESTful網路請求框架,使用註解的方式配置請求。優點是速度快,使用註解,callback函數返回結果自動包裝成Java對象。官方自己的介紹說:

A type-safe REST client for Android and Java

該網路框架在github上的地址如下:https://square.github.io/retrofit/

要求

Retrofit支持的http方式方式包括 GET/POST/PUT/DELETE/HEAD/PATCH,Retrofit要求Java的版本是1.8+,Android應用的API版本應該在21+。

依賴

使用Retrofit庫,和其他庫一樣,首先需要設置依賴,依然是在build.gradle文件中設置依賴:

//添加retrofit庫依賴

implementation 『com.squareup.retrofit2:retrofit:2.1.0』

//添加gson轉換器

implementation 『com.squareup.retrofit2:converter-gson:2.1.0』

使用

通過一個例子,我們可以來演示該框架的使用步驟:

1、定義請求介面,即程序中都需要什麼請求操作
public interface HttpServices {

/**

㈥ 怎麼使用rxjava的observable

二者區別如下:

1、RxJava有大量豐富強大的operator,可以滿足用戶的大部分數據處理需求。RxJava另一個強大的地方就是scheler,用戶可以為Observable和Subscriber指定不同的執行線程,在Android中可以方便的將Observable指定在IO線程中運行,Subscriber在UI線程中運行。
2、EventBus比較適合僅僅當做組件間的通訊工具使用,主要用來傳遞消息。使用EventBus可以避免搞出一大推的interface,僅僅是為了實現組件間的通訊,而不得不去實現那一推的介面。

聯系:RxJava和EventBus一樣也是基於觀察者模式,但是使用的場景確實非同步數據流的處理。

閱讀全文

與androidobservable相關的資料

熱點內容
vb編程10個隨機函數 瀏覽:9
程序員個人簡介100 瀏覽:770
土木工程師演算法工程師 瀏覽:90
javaexcel導入oracle 瀏覽:877
如何設置異地伺服器 瀏覽:882
為什麼安卓手機藍牙耳機不會彈窗 瀏覽:546
linuxf77編譯器安裝教程 瀏覽:949
android本地錄音許可權 瀏覽:446
加密u盤內容怎麼拷貝 瀏覽:283
安卓手機為什麼看不到iso文件 瀏覽:582
用圖片做文件夾圖標 瀏覽:693
java正則表達式語法 瀏覽:865
美圖秀在線壓縮圖片 瀏覽:184
蘋果自帶控制app是什麼 瀏覽:907
孩子學編程怎麼樣 瀏覽:589
網路編程經典書籍 瀏覽:612
曲靖創建網站java程序員 瀏覽:690
256位加密中是什麼意思 瀏覽:97
php多維數組去重 瀏覽:308
做程序員這一行儲備人才怎麼看 瀏覽:461