我已经更新了我的应用程序以使用最新的支持库(版本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员工的答案.
我正在将我的应用程序从GCM迁移到FCM.
当新用户安装我的应用程序时,onTokenRefresh()会自动调用该应用程序.问题是用户尚未登录(无用户ID).
如何onTokenRefresh()在用户登录后触发?
我有一个使用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"了.
我想让用户从图库中选择个人资料图片.我的问题是有些图片是向右旋转的.
我像这样启动图像选择器:
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) 我有一个来自服务器行代码的非常基本的加载映像:
Glide.with(view.getContext()).load(url).placeholder(R.drawable.default_profile).into(view);
出于某种原因,我总是坚持使用显示的占位符而不是真实的图像!
我已经确保传递了一个有效且有效的URL.并且,如果我在没有占位符的情况下使用相同的代码,它可以正常工作
Glide.with(view.getContext()).load(url).into(view);
有什么想法吗?
创建自定义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上显示标题?
在查看的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
我正在为我的Android应用使用Firebase身份验证.用户可以使用多个提供商(Google,Facebook,Twitter)登录.
成功登录后,有没有办法使用Firebase api从这些提供商处获取用户性别/出生日期?
我正在尝试使用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) 尝试在我的项目中使用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 ×9
android-architecture-components ×1
chromecast ×1
firebase ×1
google-cast ×1
okhttp ×1