小编gau*_*ain的帖子

Firebase 401未经授权的错误FCM

我正在尝试测试Firebase云消息传递API,因为控制台无法使用所有功能(特别是在应用程序处于后台时自定义通知).但由于某些原因,我无法让它工作,它总是出现401错误.我调查了这个的原因,并在重新生成新的服务器密钥后尝试了它,但错误保持不变.令人惊讶的是,当我生成新的服务器密钥时,它不会反映在Firebase控制台中,并且它将服务器密钥显示为空.此外,我尝试将我的IP地址添加到服务器白名单IP但仍然没有运气.我附上了一个我用Postman做的请求的截图(我用服务器密钥代替serverKey.

我坚持了几个小时,真的很感激一些帮助.在此输入图像描述

android firebase-cloud-messaging

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

异步任务Android执行

这是在一次Android采访中被问到的.我被问到是否可以从异步任务1的doInBackground()方法启动另一个异步任务(让它成为Task2)(让它成为Task1).我已经阅读了以下文档:

必须在UI线程上创建任务实例.

必须在UI线程上调用execute(Params ...).

根据这些陈述,我认为不应该从另一个任务的后台方法启动任务.此外,异步任务有UI方法(不能在后台线程上使用),所以加强了我的论点,我回答它是不可能的.

在检查一个简单的演示应用程序时,我看到它确实可以这样做.一些演示代码:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = this;
        init();
        Log.v ("gaurav", "Thread is : " + Thread.currentThread().getName());
        Task1 task = new Task1();
        task.execute();
    }

class Task1 extends AsyncTask {
    @Override
    protected Object doInBackground(Object... params) {
        // TODO Auto-generated method stub
        Log.v ("gaurav", "Thread task 1 is : " + Thread.currentThread().getName());

        Task2 task = new Task2();

        task.execute();
        return null;
    }
}

class Task2 extends AsyncTask {
    @Override
    protected Object doInBackground(Object... params) { …
Run Code Online (Sandbox Code Playgroud)

android android-asynctask

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

Android中Adapter和Loader的区别

我想知道Android中的Adapter和Loader有什么区别.我已经查看了文档,但无法弄清楚它们之间的区别.任何帮助,将不胜感激.谢谢!

android

18
推荐指数
2
解决办法
8529
查看次数

使用get时LRUCache条目重新排序

我检查了LRUCache的官方Android文档,其中说:每次访问一个值时,它都会移动到队列的头部.将值添加到完整缓存时,该队列末尾的值将被逐出,并且可能符合垃圾回收的条件.我想这是双链表,它由缓存使用的linkedhashmap维护.为了检查这种行为,我检查了LruCache的源代码,并检查了get(K key)方法.它进一步调用map的get方法,该方法从底层hashmap获取值并调用recordAccess方法.

public V get(Object key) {
    LinkedHashMapEntry<K,V> e = (LinkedHashMapEntry<K,V>)getEntry(key);
    if (e == null)
        return null;
    e.recordAccess(this);
    return e.value;
}
Run Code Online (Sandbox Code Playgroud)

如果accessOrder设置为true(对于我的问题,我们假设它是),recordAccess方法依次将访问的条目移动到列表的末尾,否则它什么都不做.

/**
     * This method is invoked by the superclass whenever the value
     * of a pre-existing entry is read by Map.get or modified by Map.set.
     * If the enclosing Map is access-ordered, it moves the entry
     * to the end of the list; otherwise, it does nothing.
     */
    void recordAccess(HashMap<K,V> m) {
        LinkedHashMap<K,V> lm …
Run Code Online (Sandbox Code Playgroud)

java android linkedhashmap android-lru-cache

8
推荐指数
1
解决办法
424
查看次数

检测Fling距离android

我正在开发一个应用程序,它要求我手动处理fling过程而不是将其提供给框架.我想要实现的是基本上计算listview在收到fling动作时移动的像素数量.由于滚动方法已经提供了三角形的距离,我已经轻松处理了它.但是有没有办法获得投掷距离,因为在超级方法中只传递速度参数.

注意 - 我必须根据投掷距离移动另一个视图,所以我需要同时获取它,就像onScroll提供它一样.谢谢.

android

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

内存泄漏终结器错误

我一直在研究内存泄漏并使用内存分析器工具来检查它们.因此,作为一种实践,我有以下代码泄漏活动,因为匿名内部类持有对活动的引用.这是代码:

   public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    exampleOne();
  }

  private void exampleOne() {
    new Thread() {
      @Override
      public void run() {
        while (true) {
          SystemClock.sleep(1000);
        }
      }
    }.start();
  }
}
Run Code Online (Sandbox Code Playgroud)

我在这里有上述泄漏的记忆分析仪图像(6次旋转): 6活动的轮换. 在此输入图像描述

很明显,有6个正在运行的线程持有对外部活动的隐式引用,从而防止它被垃圾回收.

现在,请考虑以下代码:

public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    exampleTwo();
  }

  private void exampleTwo() {
    new MyThread().start();
  }

  private static class MyThread extends Thread {
    @Override
    public void run() {
      while (true) {
        SystemClock.sleep(1000);
      }
    } …
Run Code Online (Sandbox Code Playgroud)

android memory-leaks finalizer

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

对togglesoftinput函数感到困惑

据我所知,该功能用于切换软输入.但我对作为参数传递的标志如何工作感到困惑.任何一个例子都是可观的(我也想要解释,以便我得到确切的功能).谢谢!

android

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

规范形式的领域

我正在学习Effective Java,第8项(在覆盖equals时遵守一般合同).作者已经非常清楚地解释了这一点,但仍有一些部分没有详细阐述.

对于此示例,他将类CaseInsensitiveString定义为:

public final class CaseInsensitiveString {
    private final String s;

    public CaseInsensitiveString(String s) {
        if (s == null)
            throw new NullPointerException();
        this.s = s;
    }

    // Broken - violates symmetry!
    @Override
    public boolean equals(Object o) {
        if (o instanceof CaseInsensitiveString)
            return s.equalsIgnoreCase(((CaseInsensitiveString) o).s);
        if (o instanceof String) // One-way interoperability!
            return s.equalsIgnoreCase((String) o);
        return false;
    }
    // ... // Remainder omitted
}
Run Code Online (Sandbox Code Playgroud)

在文章的最后,他说:

对于某些类,例如上面的CaseInsensitiveString,字段比较比简单的相等测试更复杂.如果是这种情况,您可能希望存储该字段的规范形式,因此equals方法可以对这些规范形式进行廉价的精确比较,而不是更昂贵的不精确比较.这种技术最适用于不可变类(第15项); 如果对象可以更改,则必须使规范形式保持最新.

我搜索了这个术语,发现它基本上意味着某种东西的标准表示,比如绝对路径,没有任何目录中文件的符号链接.但是我无法理解在这个课程中使用"规范"形式,这在这里会有所帮助.有什么建议?

java equals canonical-form effective-java

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

隐式意图的自定义权限

鉴于Android中的安全模型,我正在尝试使用广播接收器的自定义权限.

我做了什么:

我已经为接收器声明了自定义权限,从而限制了它可以接收的广播.清单中的一些代码:

<permission android:name="abc"/>

<receiver android:name=".UpdateUserReceiver"
        android:permission="abc"
        android:enabled="true"
        android:exported="false">

        <intent-filter>
            <action android:name="android.intent.action.ACTION_UPDATE_USERNAME"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

现在我希望接收器UpdateUserReceiver只接收来自使用权限'abc'的组件的广播.

广播发送代码:

// Update username. Invoke broadcast.
Intent updateUserBroadcast = new Intent();
updateUserBroadcast.putExtra("username", userName);
updateUserBroadcast.setAction("android.intent.action.ACTION_UPDATE_USERNAME");
sendBroadcast(updateUserBroadcast);
Run Code Online (Sandbox Code Playgroud)

发送广播的活动:

<activity android:name=".UpdateUserNameActivity">

        <intent-filter>
            <action android:name="com.intent.action.UPDATE_USERNAME"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

问题1:如图所示,活动无处使用接收方声明的权限,以便它可以从活动接收广播.但仍然调用接收器,我怀疑它是由于使用隐式意图虽然我不确定.有任何想法吗?

问题2:在应用级别声明的权限标记和接收者内部的android:permission标记之间有什么区别?我理解第二个的使用,它在任何人都可以期待接收者接收广播之前强制执行许可,但是为什么是第一个需要的.是否需要此方案,或者是否可以将其删除.无论哪种方式,我都检查过接收器接收广播.

android broadcastreceiver android-permissions android-security

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

重定向URL混淆Oauth2(社交集成 - android)

我在我的Android应用程序中集成了Linkedin和Amazon登录.我从他们的文档中学习了OAuth2,并了解了这个过程.但是我对整个过程有些困惑:

我认为应该发生什么(以LinkedIn为例):

  1. 我的应用点击了授权网址(https://www.linkedin.com/oauth/v2/authorization?response_type=code&client_id=123456789&redirect_uri=https%3A%2F%2Fwww.example.com%2Fauth%2Flinkedin&state=987654321&scope=r_basicprofile)
  2. 我在重定向网址中收到回调.

首先,我的问题是,在获取重定向网址后,后端会对访问令牌进行另一次API调用吗?或者后端会以某种方式将我带到我的应用程序(如果是,如何?),然后我的应用程序将调用访问令牌.

我的另一个疑问是,即使不使用OAuth2,我也可以使用以下代码获取LinkedIn用户数据:

LISessionManager.getInstance(getApplicationContext())
            .init(this, buildScope(), new AuthListener() {
                @Override
                public void onAuthSuccess() {

                    mLinkedinAccessToken = LISessionManager
                            .getInstance(getApplicationContext())
                            .getSession().getAccessToken().toString();

                    Toast.makeText(getApplicationContext(), "success" + mLinkedinAccessToken, Toast.LENGTH_LONG).show();

                    APIHelper apiHelper = APIHelper.getInstance(getApplicationContext());
                    apiHelper.getRequest(FaceBookLoginActivity.this, topCardUrl, new ApiListener() {
                        @Override


                        public void onApiSuccess(ApiResponse s) {

                            Gson gson = new Gson();
                            mLinkedInUserInfo = gson.fromJson(s.getResponseDataAsString(), LinkedInUserInfo.class);
Run Code Online (Sandbox Code Playgroud)

在这里,我没有指定任何重定向URL,甚至没有点击他们在文档中提到的URL,但我可以轻松访问数据.这不是打败了安全认证的全部目的吗?当然,我错过了一些东西,对整个过程有点困惑.我在这里感谢一些帮助.

android url-redirection linkedin-api oauth2

6
推荐指数
0
解决办法
206
查看次数