小编fah*_*hmy的帖子

每次调用Firebase Analytic的getInstance()与将实例存储为Application类中的静态变量

我正在尝试决定以下哪种方法是正确的:

  1. FirebaseAnalytics.getInstance(Context)从我正在记录事件的每个活动,片段和服务中调用.

要么

  1. FirebaseAnalytics.getInstance(Context)Application类中调用一次并将其保存为公共静态变量.然后,从我需要的任何地方,我都可以调用`MyAppClass.mFirebaseAnalytics.logEvent()'.

以上任何一种方法是否会对自动收集的事件产生不良影响和/或其中任何一种方法的效率都会提高?

非常感谢!

android firebase firebase-analytics

26
推荐指数
1
解决办法
3514
查看次数

使用class.getSimpleName()的Java switch语句给出了Constant express所需的错误

我正在尝试使用class.getSimpleName()作为交换机的表达式,但它给了我一个错误:

需要恒定快递

我已经看到答案建议将表达式变量声明更改为具有编译时常量表达式的初始化器.但是,在这种情况下这是不可能的.

有没有办法使用class.getSimpleName()进行切换而不必对类名进行硬编码?

示例代码

public class ClassA {
   public static final String TAG = ClassA.class.getSimpleName();
   ...
}

public class ClassB {
  public static final String TAG = ClassB.class.getSimpleName();
  ...
}

public class SomeOtherClass {
  switch (express) {
     case ClassA.TAG: // Error here
        ...
        break;
     case ClassB.TAG: // and here
        ...
        break;
     default:
        ...
        break;
 }
Run Code Online (Sandbox Code Playgroud)

java switch-statement

11
推荐指数
1
解决办法
840
查看次数

从 SharedPreferences 读取与保留对象的实例

情景

我有一个使用用户设置的请求列表的类。请求列表存储在 SharedPreferences 中。我面临的困境是每次需要请求列表时是保留请求列表的实例还是从 SharedPreferences 读取(这种情况非常频繁)。

也不是 Gson 用于反序列化对象。

代码是这样的:

public List<PrayerTimesCalculator.Time> getDefaultRequestList() {
    if (mRequestList != null) return mRequestList;
    // Try getting request list from preferences;
    Gson gson = new Gson();
    String json = mSharedPref.getString(KEY_PREF_REQUEST_LIST, null);
    Type listType = new TypeToken<List<Time>>() {
    }.getType();
    mRequestList = gson.fromJson(json, listType);
    if (mRequestList != null) return mRequestList;
    // Create default list;
    mRequestList = Arrays.asList(
           Time.DAWN,
           Time.MORNING,
           Time.AFTERNOON,
           Time.EVENING,
           Time.MID_NIGHT);
    return mRequestList;
}
Run Code Online (Sandbox Code Playgroud)

目标

我担心的是,如果我保留请求列表的一个实例,并且该类有多个实例,则该类的一个实例中对请求列表的更新不会反映在其余实例中,直到它们被重新创建.

因此,我倾向于从 SharedPreferences 中读取数据,除非有更好的方法可以在所有情况下保持更新的请求列表。

问题

(1) 那么,通过对象的多个实例非常频繁地从 SharedPreferences 读取相同的键的效率如何?和 (2) …

performance android sharedpreferences

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

转换为位图时不会呈现CardView阴影

问题

我试图保存一个视图组(其中有一个CardView作为其childern)作为PNG文件.为达到这个,

  1. 我给视图组充气并用所需信息填充视图
  2. 通过Glide将图像加载到图像视图
  3. 一个添加ViewTreeObserver.OnGlobalLayoutListenerViewTreeObserver图像视图的并传递将要被共享到其将所述视图为位图的方法中的整个(父)视图图像视图的底部是大于零(图像视图的高度属性被设置为wrap_content,从而它的底部将为零,直到图像被加载).

通过这样做,我能够将视图转换为位图,但有一点需要注意:该CardView节目未在位图上呈现.

失败的尝试

到目前为止,我已经尝试过:

  1. layerType属性从"软件" 切换到"硬件".
  2. 设置开启和关闭cardUseCompatPadding属性CardView.
  3. 尝试在不使用Glide的情况下将图像设置为可绘制.
  4. 尝试没有加载任何可绘制的图像.

代码

以下是可能有助于您识别问题的代码段:

用于将视图转换为位图的方法

public static Bitmap getBitmapFromView(View view) {
    //Define a bitmap with the same size as the view
    Bitmap b = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
    //Bind a canvas to it
    Canvas canvas = new Canvas(b);
    //Get the view's background
    Drawable bgDrawable = view.getBackground();
    if (bgDrawable != null) …
Run Code Online (Sandbox Code Playgroud)

android bitmap shadow android-layout android-cardview

5
推荐指数
1
解决办法
780
查看次数

在画布上绘制圆形形状(Android)

这是我用来在画布上绘制圆形形状(然后在其上绘制图标位图)的内容:

private static Bitmap makeIcon(int radius, int color, Bitmap icon) {
    final Bitmap output = Bitmap.createBitmap(radius, radius, Bitmap.Config.ARGB_8888);
    final Canvas canvas = new Canvas(output);
    final Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setColor(color);
    canvas.drawARGB(0, 0, 0, 0);
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT)
        canvas.drawCircle(radius / 2, radius / 2, radius / 2, paint);
    else
        canvas.drawRect(0, 0, radius, radius, paint);
    int cx = (radius - icon.getWidth()) >> 1; // same as (...) / 2
    int cy = (radius - icon.getHeight()) >> 1;
    canvas.drawBitmap(icon, cx, …
Run Code Online (Sandbox Code Playgroud)

android drawing shape android-canvas

3
推荐指数
1
解决办法
914
查看次数

如何为 Android 模拟器设置 Mockoon?

我正在尝试使用mockoon来运行模拟 API 来测试我的 macOS 上的 Android 应用程序(使用 Retrofit2)。

使用0.0.0.0:[port]localhost:[port]作为地址不起作用。

知道我应该以不同的方式做什么吗?

api android mocking

3
推荐指数
1
解决办法
277
查看次数

从另一个AsyncTask的onPostExecute启动的asyncTask在API 10中无法正确执行

建立:

我有一个单例应用程序类,它有一个名为的方法fetchUpdates().此方法由UpdaterService(IntentService)类调用.fetchUpdates()方法只是调用DownloadDataAsyncTask,然后UpdateDbAsyncTaskonPostExecute数据成功下载期间调用.两个AsyncTasks都驻留在应用程序类中(不确定这是否与问题相关).

public synchronized void fetchUpdates() {
    String[] mURLs = getURLs();
    new DownloadDataAsyncTask().execute(mURLs[0], mURLs[1]);
}
Run Code Online (Sandbox Code Playgroud)

DownloadDataAsyncTask类

private class DownloadDataAsyncTask extends AsyncTask<String, Void, JSONObject[]> {

    @Override
    protected synchronized JSONObject[] doInBackground(String... params) {
        String urlData = (String) params[0];
        String urlId = (String) params[1];
        JSONObject[] jSON = new JSONObject[] {
                JSONfunctions.getJSONfromURL(urlData),
                JSONfunctions.getJSONfromURL(urlId) };
        return mJSON;
    }

    @Override
    protected void onPostExecute(JSONObject[] result) {
         if (result[0] != null && result[1] != null) {
             new UpdateDbAsyncTask().execute(result[0], …
Run Code Online (Sandbox Code Playgroud)

android asynctaskloader

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

同步方法是否在与UI线程(Android)不同的线程上运行?

在这里第一次发布问题.刚开始编程和编码我的第一个应用程序

我有一个Application类文件,其方法为fetchUpdates():

public synchronized void fetchUpdates() {
    String[] mURLs = getURLs();
    new DownloadJSONData().execute(mURLs[0], mURLs[1]);
}
Run Code Online (Sandbox Code Playgroud)

DownloadJSONData是asyncTask从服务器获取更新,该onPostExecute方法使用服务器中的JSON数组更新sqlite数据库.

应用程序的不同组件(小部件和活动)调用此方法以从服务器获取更新以更新数据库.

问题:synchronized方法是否在与UI线程不同的线程上运行?如果是这样,DownloadJSONData将同步fetchUpdates()方法中的代码移动到右边应该没有问题吗?如果在连接服务器或从服务器下载数据时存在滞留,它不应该阻止UI线程吗?

动机:我正在尝试更改fetchUpdates()方法以返回指示数据库是否已更新的布尔值.然而,因为它现在是(我认为)fetchUpdates()方法之前完成asyncTaskonPostExecute方法,因此,fetchUpdates()方法不能指明呼叫是否DownloadJSONData()更新数据库.fetchUpdates()如果在调用后更新数据库,我需要调用方法的应用程序组件以不同的方式运行.

PS因为我刚接触编程简单而详细的解释会非常有用.

谢谢!

java android synchronized android-asynctask

0
推荐指数
1
解决办法
1511
查看次数