小编DAr*_*rkO的帖子

在VideoView中定位视频

所以我扩展了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的重力设置为居中.

layout android android-videoview

52
推荐指数
4
解决办法
4万
查看次数

JSON Jackson将不同的密钥解析到同一个字段中

我有一个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以识别这种情况并反序列化到同一个字段中.它们不可能出现在同一个响应中.

java json jackson

49
推荐指数
4
解决办法
5万
查看次数

Android Gradle替换清单中值的包名称

我正在使用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.做这个的最好方式是什么?

android gradle

39
推荐指数
1
解决办法
2万
查看次数

Android只使用列有电子邮件> android 2.0的联系人获取游标

我有以下代码来获取联系人 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等.

这种方式有很长的等待时间来获取联系人列表.我正在使用此列表作为列表适配器.如果我只能得到有电子邮件的联系人我可以在我的列表中使用游标适配器.

这样的事情可能吗?我怎样才能加快这个过程?

android cursor contacts

15
推荐指数
2
解决办法
1万
查看次数

java计算两个时间戳之间的时间

我需要计算两个日期之间的时间.

这里的问题是,我需要将其显示为YouTube的视频评论时间戳.也就是说,仅通过最大的衡量标准来显示它.

例如,

  • 如果时间是50秒前它应该说50秒前.
  • 如果时间超过一分钟,应该说一分钟前/十分钟前等.
  • 如果时差为1小时30分钟,则应显示:一小时前.
  • 如果时间比一周前应该说的一周半.
  • 如果时间超过一个月应该说一个月前/两个月前等...
  • 等等等等..

那么处理这个问题的最佳方法是什么?我应该使用caseif返回类似这样的语句吗?或者是否有更好的方法(也许是一个已经做过类似工作的库)?

java time android timestamp date-arithmetic

15
推荐指数
2
解决办法
2万
查看次数

Spring Boot 在 ServerOAuth2AuthorizedClientExchangeFilterFunction 中向 WebClient 请求添加附加属性

我正在尝试实现 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 …

spring-boot spring-security-oauth2 auth0

14
推荐指数
2
解决办法
1万
查看次数

android jackson json对象映射器数组反序列化

我需要帮助解析杰克逊映射器到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.

我该怎么做呢.我似乎无法找到如何以这种方式从数组中读取数据.

android json pojo jackson

11
推荐指数
2
解决办法
9447
查看次数

使用Cursor和ListView适配器获取大量数据

我正在使用自定义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)

database android listview adapter

7
推荐指数
1
解决办法
2万
查看次数

SQlite按个案查询

我有一个表,其中包含列中的两种类型的文本.第一种是电子邮件地址字符串(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)

所以我无法做的是让案例按升序排序,以便我按照按字母升序排序的电子邮件后面的字母升序排序.

sql sqlite android sql-order-by

7
推荐指数
1
解决办法
8875
查看次数

找到最近的Gps指向用户位置形成一个列表

我想做的是:用户在地图上选择开始和目的地,然后从他们的坐标我想显示地图上的位置列表中最近的点位置.我有一个简单的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行数据库的解决方案.

编辑:我在排序中的这段代码中出现了错误,现在我已将其更改(应该是<而不是>)

java database android location

6
推荐指数
1
解决办法
8426
查看次数