导航:首页 > 操作系统 > 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相关的资料

热点内容
孩子学编程怎么样 浏览:584
网络编程经典书籍 浏览:612
曲靖创建网站java程序员 浏览:690
256位加密中是什么意思 浏览:97
php多维数组去重 浏览:308
做程序员这一行储备人才怎么看 浏览:460
参加密逃文 浏览:327
苹果编程语言ios 浏览:763
求解病态系统常用的算法 浏览:993
驾校用的app叫什么 浏览:219
数控编程线的缠绕方法 浏览:972
安卓线性布局怎么设计计算器布局 浏览:24
拓本pdf 浏览:79
2017法硕指南pdf 浏览:295
linuxphp命令参数 浏览:425
可靠性预测和推荐算法 浏览:855
程序员送女友的相册 浏览:254
压缩文件怎么设置打开加密 浏览:768
tracert命令结果详解 浏览:360
唯赛思通用什么APP 浏览:376