小编Tar*_*ury的帖子

Android Fragment onAttach()已弃用

我已经更新了我的应用程序以使用最新的支持库(版本23.0.0),我发现他们已经弃用了Fragment类的onAttach()函数.

代替:

onAttach (Activity activity)
Run Code Online (Sandbox Code Playgroud)

下雪了:

onAttach (Context context)
Run Code Online (Sandbox Code Playgroud)

由于我的应用程序使用了弃用之前传递的活动,我认为可能的解决方案是:

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    activity = getActivity();
}
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?

更新:

如果我运行API低于23的设备,则甚至不会调用新的onAttach().我希望这不是他们打算做的!

更新2:

问题已通过SDK的最新更新得到解决.

我已经在我的API 22设备上进行了测试,并且正在调用onAttach(Context).

点击此处查看我几周前开设的错误报告以及Google员工的答案.

android android-fragments

317
推荐指数
6
解决办法
13万
查看次数

Firebase FCM强制onTokenRefresh()被调用

我正在将我的应用程序从GCM迁移到FCM.

当新用户安装我的应用程序时,onTokenRefresh()会自动调用该应用程序.问题是用户尚未登录(无用户ID).

如何onTokenRefresh()在用户登录后触发?

android firebase-cloud-messaging

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

FCM获得MismatchSenderId

我有一个使用Google FCM发送推送通知的应用程序.

当我向一组用户发送推送通知时,我得到了MismatchSenderId一些用户的回复.尽管如此,所有用户都拥有完全相同的应用程序.一些用户如何获得成功响应而其他用户获得MismatchSenderId?

我已经研究了很多,并确保我已经添加了FCM所需的所有先决条件.

有什么建议?

编辑:

样品回复:

{"multicast_id":5340432438815499122,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"MismatchSenderId"}]}
Run Code Online (Sandbox Code Playgroud)

编辑2:

这是服务器端发送代码(PHP):

$fields = array
(
  'to' => $token,
  'data' => $data
);

$headers = array
(
  'Authorization: key=AIza**************************',
  'Content-Type: application/json'
);

$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send' );
curl_setopt( $ch,CURLOPT_POST, true );
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, true );
curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode($fields) );
curl_exec( $ch );
curl_close( $ch );
Run Code Online (Sandbox Code Playgroud)

更新:

似乎已通过SDK更新解决了该问题.我现在正在使用最新版本com.google.firebase:firebase-messaging:9.6.1,我不再使用"MismatchSenderId"了.

firebase firebase-cloud-messaging

63
推荐指数
10
解决办法
8万
查看次数

Android从图库中获取图像是旋转的

我想让用户从图库中选择个人资料图片.我的问题是有些图片是向右旋转的.

我像这样启动图像选择器:

Intent photoPickerIntent = new Intent();
photoPickerIntent.setType("image/*");
photoPickerIntent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(photoPickerIntent, "Select profile picture"), Global.CODE_SELECT_PICTURE);
Run Code Online (Sandbox Code Playgroud)

我从onActivityResult获取图像,如下所示:

Uri selectedPicture = data.getData();
profilePic = MediaStore.Images.Media.getBitmap(activity.getContentResolver(), selectedPicture);
Run Code Online (Sandbox Code Playgroud)

如何让图像不被旋转?

更新:

根据我收到的一些有用的答案,我设法提出了以下工作解决方案(这只是一个工作代码,写得不好).我很想得到你如何改进它的反馈!

public void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (resultCode == Activity.RESULT_OK && requestCode == Global.CODE_SELECT_PICTURE) {

        // Get selected gallery image
        Uri selectedPicture = data.getData();
        // Get and resize profile image
        String[] filePathColumn = {MediaStore.Images.Media.DATA};
        Cursor cursor = activity.getContentResolver().query(selectedPicture, filePathColumn, null, null, null);
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        String picturePath = cursor.getString(columnIndex); …
Run Code Online (Sandbox Code Playgroud)

android android-gallery

53
推荐指数
3
解决办法
3万
查看次数

滑动不加载真实图像并停留占位符

我有一个来自服务器行代码的非常基本的加载映像:

Glide.with(view.getContext()).load(url).placeholder(R.drawable.default_profile).into(view);

出于某种原因,我总是坚持使用显示的占位符而不是真实的图像!

我已经确保传递了一个有效且有效的URL.并且,如果我在没有占位符的情况下使用相同的代码,它可以正常工作

Glide.with(view.getContext()).load(url).into(view);

有什么想法吗?

android android-glide

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

Android DialogFragment标题未显示

创建自定义DialogFragment时,我使用以下设置标题:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragment_dialog_add, container, false);      

    // Setting title here
    getDialog().setTitle("Add New");

    return v;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在23级以上的API级别上运行正常.对于API 23,标题根本没有显示.

知道为什么吗?以及如何在API 23上显示标题?

android android-dialogfragment

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

1.1.0中不推荐使用ViewModelProviders

在查看的Google文档ViewModel,他们显示了以下有关如何获取的示例代码ViewModel

val model = ViewModelProviders.of(this).get(MyViewModel::class.java)
Run Code Online (Sandbox Code Playgroud)

使用最新的依赖项时android.arch.lifecycle:extensions:1.1.1,没有此类ViewModelProviders

要在文档ViewModelProviders,我看到一个评论说:

在API级别1.1.0中不推荐使用该类。使用ViewModelProvider.AndroidViewModelFactory

问题是,当尝试使用时ViewModelProvider.AndroidViewModelFactory,无法找到等效的of方法来获取的实例ViewModel

我尝试做的是:

ViewModelProvider.AndroidViewModelFactory.getInstance(application).create(PlayerViewHolder::class.java)
Run Code Online (Sandbox Code Playgroud)

因此,方法的名称create每次调用时都会得到一个ViewModel的新实例,这不是我想要的。

有什么想法可以替换上面不推荐使用的代码吗?

android android-gradle-plugin android-viewmodel android-architecture-components

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

Firebase Auth获取其他用户信息(年龄,性别)

我正在为我的Android应用使用Firebase身份验证.用户可以使用多个提供商(Google,Facebook,Twitter)登录.

成功登录后,有没有办法使用Firebase api从这些提供商处获取用户性别/出生日期?

android firebase-authentication

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

OkHTTP从enqueue回调更新UI

我正在尝试使用OkHTTP库.调用服务器并获得成功响应时.我需要更新UI.

使用enqueue()进行异步调用时如何才能完成?

client.newCall(request).enqueue(new Callback() {

    @Override
    public void onFailure(Request request, IOException e) {

    }

    @Override
    public void onResponse(Response response) throws IOException {

        if (response.isSuccessful()) {

            // NEED TO UPDATE UI HERE

        } 
    }
});
Run Code Online (Sandbox Code Playgroud)

android okhttp

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

Google Cast按钮未在Android中显示

尝试在我的项目中使用Google的演员SDK v3,即使我在我附近活动了投射接收器,也无法显示投射按钮

我已将Google强制转换按钮添加到我的项目布局中,如下所示:

<android.support.v7.app.MediaRouteButton
        android:id="@+id/media_route_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:mediaRouteTypes="user"
        android:visibility="gone" />
Run Code Online (Sandbox Code Playgroud)

上面的按钮不是菜单按钮,所以我在onCreate中设置了按钮,如下所示:

CastButtonFactory.setUpMediaRouteButton(getApplicationContext(), mediaRouteButton);
Run Code Online (Sandbox Code Playgroud)

我也在CastOptionsProvider我的AndroidManifest文件中创建并指向它

根据Google演员文档:

在v3中,当应用程序到达前台并分别进入后台时,框架会自动启动和停止发现过程.不应使用MediaRouteSelector和MediaRouter.Callback.

任何想法为什么谷歌投射按钮不会自动出现,因为按钮应该处理他自己的状态?

编辑

我目前的解决方案/解决方法是:

castContext.addCastStateListener(
    newState -> updateCastButtonVisibility(button, newState)
);

private static void updateCastButtonVisibility(View button, int state) {
 if (state == CastState.NO_DEVICES_AVAILABLE) {
        button.setVisibility(View.GONE);
    } else {
        button.setVisibility(View.VISIBLE);
    }
}
Run Code Online (Sandbox Code Playgroud)

android google-cast chromecast

9
推荐指数
2
解决办法
1562
查看次数