所以我扩展了VideoView的onMeasure以扩展视频以适应全屏视图.
这是如何:
public void setVideoAspect(int w,int h){
wVideo=w;
hVideo=h;
onMeasure(w, h);
}
@Override
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if(wVideo!=0 && hVideo!=0)
setMeasuredDimension(wVideo,hVideo);
}
Run Code Online (Sandbox Code Playgroud)
我使用屏幕的显示指标(宽度,高度)调用setVideoAspect().问题是这种方法会拉伸视频以适应屏幕内部.我希望能够保持纵横比.(我有4:3的视频和3:2的屏幕尺寸.)我使用下面的代码给视图保留比率测量值:
int height = (int) (metrics.widthPixels*3/(float)4);
int width= metrics.widthPixels;
mVideoView.setVideoAspect(width,height);
Run Code Online (Sandbox Code Playgroud)
所以这可以完成这项工作,但是有一个问题:它给了我一个4:3的视频,屏幕的宽度和正确的比例,但它不会使视频居中.(它只是播放视频的底部而不是顶部和底部.)我有一个包含VideoView的相对布局,VideoView的重力设置为居中.
我有一个POJO,它有一个字段:
public class Media {
private Asset asset;
}
Run Code Online (Sandbox Code Playgroud)
将json响应解析为此资产POJO时,一切都很完美.但是,这个资产带来的关键点略有不同.它可以是:
@JsonProperty("cover_asset")
Run Code Online (Sandbox Code Playgroud)
要么
@JsonProperty("asset")
Run Code Online (Sandbox Code Playgroud)
有没有办法注释POJO以识别这种情况并反序列化到同一个字段中.它们不可能出现在同一个响应中.
我正在使用Gradle with Product flavors,我为每个设置了不同的包名.
productFlavors {
appone {
packageName "com.dg.app1"
}
apptwo {
packageName "com.dg.app2"
}
appthree {
packageName "com.dg.app3"
}
appfour {
packageName "com.dg.app4"
}
}
Run Code Online (Sandbox Code Playgroud)
我需要能够在清单中替换每个相应应用程序的包名称.
我的清单有这个:
<receiver android:name="com.parse.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.dg.example" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
所以我需要为每个app flavor的包名替换com.dg.example.做这个的最好方式是什么?
我有以下代码来获取联系人 content provider
String[] columns = new String[] {
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts._ID,
ContactsContract.Contacts.PHOTO_ID };
Cursor cursor = managedQuery(ContactsContract.Contacts.CONTENT_URI,
columns, null, null, null);
Run Code Online (Sandbox Code Playgroud)
我使用这个来获取他们的ID的特定联系人的电子邮件:
Cursor emails = getContentResolver().query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID
+ " = " + contact.getContactId(), null, null);
Run Code Online (Sandbox Code Playgroud)
我当前的实现传递了游标中的每一行并获取其电子邮件并将它们存储在java对象的arrayList中.
我想知道是否有可能做的只是查询内容提供商并返回一个只有联系人的光标,其中包含列出了电子邮件地址的ids/name等.
这种方式有很长的等待时间来获取联系人列表.我正在使用此列表作为列表适配器.如果我只能得到有电子邮件的联系人我可以在我的列表中使用游标适配器.
这样的事情可能吗?我怎样才能加快这个过程?
我需要计算两个日期之间的时间.
这里的问题是,我需要将其显示为YouTube的视频评论时间戳.也就是说,仅通过最大的衡量标准来显示它.
例如,
那么处理这个问题的最佳方法是什么?我应该使用case或if返回类似这样的语句吗?或者是否有更好的方法(也许是一个已经做过类似工作的库)?
我正在尝试实现 client_credentials 授予以在我的 Spring Boot 资源服务器中获取令牌。我使用Auth0作为授权服务器。他们似乎需要在请求正文中添加一个名为“audience”的额外参数。
我尝试通过邮递员提出请求并且它有效。我现在正尝试在 Spring 内重现它。这是工作邮递员的请求
curl -X POST \
https://XXX.auth0.com/oauth/token \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'grant_type=client_credentials&audience=https%3A%2F%2Fxxxxx.auth0.com%2Fapi%2Fv2%2F&client_id=SOME_CLIENT_ID&client_secret=SOME_CLIENT_SECRET'
Run Code Online (Sandbox Code Playgroud)
我面临的问题是我无法将缺少的受众参数添加到令牌请求中。
我在 application.yml 中定义了一个配置
client:
provider:
auth0:
issuer-uri: https://XXXX.auth0.com//
registration:
auth0-client:
provider: auth0
client-id: Client
client-secret: Secret
authorization_grant_type: client_credentials
auth0:
client-id: Client
client-secret: Secret
Run Code Online (Sandbox Code Playgroud)
我的网络客户端过滤器是这样配置的。
@Bean
WebClient webClient(ReactiveClientRegistrationRepository clientRegistrations,
ServerOAuth2AuthorizedClientRepository authorizedClients) {
ServerOAuth2AuthorizedClientExchangeFilterFunction oauth2 = new ServerOAuth2AuthorizedClientExchangeFilterFunction(
clientRegistrations, authorizedClients);
oauth2.setDefaultClientRegistrationId("auth0");
return WebClient.builder()
.filter(oauth2)
.build();
}
Run Code Online (Sandbox Code Playgroud)
我正在注入实例并尝试发出请求以通过电子邮件获取用户
return this.webClient.get()
.uri(this.usersUrl + "/api/v2/users-by-email?email={email}", email)
.attributes(auth0ClientCredentials())
.retrieve()
.bodyToMono(User.class);
Run Code Online (Sandbox Code Playgroud)
按照我的理解,过滤器拦截此 userByEmail …
我需要帮助解析杰克逊映射器到POJO的响应.我有这个作为回应:
"data": [{
"item": {
"downloaded": false,
"moderated": false,
"add": false
}
},
{
"item": {
"downloaded": false,
"moderated": false,
"add": false }
// more
Run Code Online (Sandbox Code Playgroud)
那么如何将这个与mapper绑定到POJO?这是我正在尝试的类,但它返回"item"无法识别且不允许被忽略.
public ArrayList<Item> data = new ArrayList<Item>();
Run Code Online (Sandbox Code Playgroud)
其中item是一个公共静态类Item,带有构造函数,上面的所有字段都带有getter和setter.
我该怎么做呢.我似乎无法找到如何以这种方式从数组中读取数据.
我正在使用自定义CursorAdapter从SQLite数据库中获取数据并在列表视图中显示它.该数据库包含2列,大约8.000行.所以我正在寻找一种方法来查询和尽快显示所有数据.我用asyncTask完成了这个是代码:
private class PrepareAdapter extends AsyncTask<Void,Void,CustomCursorAdapter > {
@Override
protected void onPreExecute() {
dialog.setMessage("Wait");
dialog.setIndeterminate(true);
dialog.setCancelable(false);
dialog.show();
Log.e("TAG","Posle nov mAdapter");
}
@Override
protected CustomCursorAdapter doInBackground(Void... unused) {
Cursor cursor = myDbNamesHelper.getCursorQueryWithAllTheData();
mAdapter.changeCursor(cursor);
startManagingCursor(cursor);
Log.e("TIME","posle start managing Cursor" + String.valueOf(SystemClock.elapsedRealtime()-testTime)+ " ms");
testTime=SystemClock.elapsedRealtime();
mAdapter.initIndexer(cursor);
return mAdapter;
}
protected void onPostExecute(CustomCursorAdapter result) {
TabFirstView.this.getListView().setAdapter(result);
Log.e("TIME","posle adapterSet" + String.valueOf(SystemClock.elapsedRealtime()-testTime)+ " ms");
testTime=SystemClock.elapsedRealtime();
dialog.dismiss();
}
Run Code Online (Sandbox Code Playgroud)
}
除了我需要将结果设置为适配器的部分之外,这个工作正常.我做了一些时间测试,需要大约700毫秒来使它超过startManagingCursor.问题是它需要大约7秒才能超过setAdapter(结果)并且它在UI线程中运行,因此它使我的应用程序无响应(进度对话框冻结,有时会执行应用程序).我如何减少这个时间?我可以使这也在后台运行或以任何方式提高响应能力?
TNX.
public class CustomCursorAdapter extends SimpleCursorAdapter implements OnClickListener,SectionIndexer,Filterable,
android.widget.AdapterView.OnItemClickListener{
private Context context;
private int layout;
private AlphabetIndexer …Run Code Online (Sandbox Code Playgroud) 我有一个表,其中包含列中的两种类型的文本.第一种是电子邮件地址字符串(ex 222@dsad.com),第二种是人名(John Doe)
我正在使用此查询来对数据进行排序,以便首先显示没有@char的行,然后显示具有它的行:
SELECT *
FROM Name
ORDER BY CASE
WHEN displayName LIKE '%@%' THEN 1
ELSE 2
END
Run Code Online (Sandbox Code Playgroud)
所以我无法做的是让案例按升序排序,以便我按照按字母升序排序的电子邮件后面的字母升序排序.
我想做的是:用户在地图上选择开始和目的地,然后从他们的坐标我想显示地图上的位置列表中最近的点位置.我有一个简单的Sqlite数据库,包含可能位置的经度,纬度和名称.
我做了一些研究,这是我发现的:
http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL
但这是为了将它与mySql和某种空间搜索扩展一起使用.有没有可能我可以使用android api或外部库做类似的事情?
public Point dialogFindClosestLocationToPoint(geometry.Point aStartPoint){
List<PointWithDistance> helperList=new ArrayList<PointWithDistance>();
try {
openDataBase();
Cursor c=getCursorQueryWithAllTheData();
if(c.moveToFirst())
do{
PointWithDistance helper=new PointWithDistance(c.getDouble(1),c.getDouble(2),c.getString(3));
int distance=returnDistanceBetween2Points(aStartPoint, helper);
if(distance<MAX_SEARCH_DISTANCE){
helper.setDistance(distance);
Log.i("values", helper.name);
helperList.add(helper);
}
}while (c.moveToNext());
Collections.sort(helperList,new PointComparator());
if(helperList!=null)
return helperList.get(0);
else return null;
}catch(SQLException sqle){
throw sqle;
}
finally{
close();
}
Run Code Online (Sandbox Code Playgroud)
这是PointComparator()类中的代码:
public int compare(PointWithDistance o1, PointWithDistance o2) {
return (o1.getDistance()<o2.getDistance() ? -1 : (o1.getDistance()==o2.getDistance() ? 0 : 1));
}
Run Code Online (Sandbox Code Playgroud)
where PointWithDistance是一个包含:lat,long,distance,name的对象
但是这个解决方案没有提供正确的返回信息......我意识到它根本不可扩展且非常慢.我需要一个能够快速执行最多1000行数据库的解决方案.
编辑:我在排序中的这段代码中出现了错误,现在我已将其更改(应该是<而不是>)