小编Aks*_*iya的帖子

Android Room:使用Room插入关系实体

我在Room使用Relation添加了一对多的关系.我在这篇文章中提到了在Room中为关系编写以下代码.

该帖子告诉如何从数据库中读取值,但将实体存储到数据库中导致userId为空,这意味着两个表之间没有关系.

我不知道什么是理想的途径,insert一个UserList of Pet到数据库中,同时具有userId价值.

1)用户实体:

@Entity
public class User {
    @PrimaryKey
    public int id; // User id
}
Run Code Online (Sandbox Code Playgroud)

2)宠物实体:

@Entity
public class Pet {
    @PrimaryKey
    public int id;     // Pet id
    public int userId; // User id
    public String name;
}
Run Code Online (Sandbox Code Playgroud)

3)UserWithPets POJO:

// Note: No annotation required at this class definition.
public class UserWithPets {
   @Embedded
   public User user;

   @Relation(parentColumn = "id", …
Run Code Online (Sandbox Code Playgroud)

android android-room android-architecture-components

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

Media Session Compat未在Pre-Lollipop上显示锁屏控件

我正在使用MediaSessionCompatAppCompat支持库修订版22.在Lollipop上我收到通知,而且锁屏背景也是专辑封面.一切都很酷.

在Pre-Lollipop设备上,锁屏上的音乐控件根本没有显示.这很奇怪,我尝试了一切,但它没有出现,甚至没有出现背景变化.

我希望有人能解决这个问题.

注意:RemoteControlClient曾经用于Lollipop和KitKat

/**
 * Initializes the remote control client
 */
private void setupMediaSession() {
    /* Activate Audio Manager */
    mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    mAudioManager.requestAudioFocus(mAudioFocusListener, AudioManager.STREAM_MUSIC,
            AudioManager.AUDIOFOCUS_GAIN);

    ComponentName mRemoteControlResponder = new ComponentName(getPackageName(),
            MediaButtonReceiver.class.getName());
    final Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
    mediaButtonIntent.setComponent(mRemoteControlResponder);
    mMediaSessionCompat = new MediaSessionCompat(getApplication(), "JairSession", mRemoteControlResponder, null);
    mMediaSessionCompat.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
    PlaybackStateCompat playbackStateCompat = new PlaybackStateCompat.Builder()
            .setActions(
                    PlaybackStateCompat.ACTION_SEEK_TO |
                    PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS |
                    PlaybackStateCompat.ACTION_SKIP_TO_NEXT |
                    PlaybackStateCompat.ACTION_PLAY |
                    PlaybackStateCompat.ACTION_PAUSE |
                    PlaybackStateCompat.ACTION_STOP
            )
            .setState(
                    isPlaying() ? PlaybackStateCompat.STATE_PLAYING : PlaybackStateCompat.STATE_PAUSED,
                    getCurrentPosition(), …
Run Code Online (Sandbox Code Playgroud)

android lockscreen android-mediaplayer android-5.0-lollipop

34
推荐指数
3
解决办法
9457
查看次数

如何在Android studio的屏幕截图中添加更多帧,如Nexus 6P,5X等

我是真正的Android工作室爱好者......

Android监视器中有一个很棒的插件是SCHREEN CAPTURE ,如下图所示.

在此输入图像描述

它非常适合捕获模拟器屏幕.

我的问题

在屏幕截图中有一个选项框架截图,我可以选择我的屏幕截图框架设备.

但是只有4个设备列表

  • nexus s
  • nexus one
  • 通用手机
  • 通用平板电脑

如何添加更多设备框架.

有什么办法吗?

等待你的建议.

在此输入图像描述

编辑

注意:我不希望预览选项卡中的xml屏幕截图,因为它不是运行时屏幕.

android screenshot android-studio

33
推荐指数
3
解决办法
3608
查看次数

从JobService观察LiveData

我有一个存储库,用于存放LiveData对象并由两者使用Activity,现在需要JobService(从Firebase调度程序)到ViewModel.

这里有简单的答案Service:从前台服务观察LiveData

但它没有提到如何做同样的事情JobService.

android android-service android-jobscheduler android-livedata android-architecture-components

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

Android架构组件ViewModel - 如何在测试Activity上模拟ViewModel?

我想类似的设置UI测试GithubBrowserSample,它看起来像示例项目只有模仿ViewModelFragment,但不是一个例子Activity.

这是我的代码,我试图Activity通过嘲笑来测试ViewModel.但是在Activity ViewModel之前没有设置好onCreate().

@RunWith(AndroidJUnit4::class)
class MainActivityTest {

    val viewModel = mock(MainViewModel::class.java)

    @Rule
    @JvmField
    val activityRule = ActivityTestRule<MainActivity>(MainActivity::class.java, true, true)

    private val liveData = MutableLiveData<Resource<Object>>()

    @Before
    open fun setUp() {
        activityRule.activity.viewModelFactory = createViewModelFor(viewModel)
        `when`(viewModel.liveData).thenReturn(liveData)
        viewModel.liveData?.observeForever(mock(Observer::class.java) as Observer<Resource<Object>>)
        liveData.postValue(Resource.success(Object()))
    }

    fun <T : ViewModel> createViewModelFor(model: T): ViewModelProvider.Factory =
        object : ViewModelProvider.Factory {
            override fun <T : ViewModel> create(modelClass: Class<T>): T {
                if (modelClass.isAssignableFrom(model.javaClass)) {
                    return model as …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-espresso android-viewmodel android-architecture-components

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

如何使用Material Design制作数字搜索栏

我很多天都在尝试制作一个搜索栏,在搜索栏上显示一个内部有进展的泡沫.如Google Design中所示: Sliders

我也很难在Google设计指南中查看Seekbar

android android-seekbar material-design

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

AppBarLayout奇怪地占据空间并推动内容下降

我正在使用新的Android设计库和自动隐藏Toolbar功能.目前滚动上的自动隐藏工作正常.但是有了这个问题,请看下面的截图切割FloatingActionButton

正如你所看到的那样FloatingActionButton推倒了.

码:

<android.support.design.widget.CoordinatorLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@android:id/home"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.v7.widget
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clipToPadding="false"
        android:paddingTop="@dimen/activity_vertical_margin"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:src="@drawable/ic_shuffle"
        style="@style/FabStyle"/>

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_scrollFlags="scroll|enterAlways"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

    </android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

FabSyle:

<style name="FabStyle">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_gravity">bottom|end</item>
    <item name="android:layout_marginEnd">@dimen/activity_horizontal_margin</item>
    <item name="android:layout_marginBottom">@dimen/activity_vertical_margin</item>
    <item name="borderWidth">0dp</item>
    <item name="elevation">@dimen/fabElevation</item>
    <item name="pressedTranslationZ">@dimen/fabPressedZ</item>
</style>
Run Code Online (Sandbox Code Playgroud)

我也试过太多添加marginpadding底部工作,但当列表滚动它太过分了.

最好的事情是当我玩的时候AppBarLayout停止滚动的自动隐藏Toolbar然后FloatingActionButton看起来很好.

android android-toolbar android-design-library android-appbarlayout

6
推荐指数
2
解决办法
3839
查看次数

LiveData 不会将数据从一个活动更新到另一个活动 - Android

我有 2 个Activity可视化

  1. 列表 Activity
  2. 细节 Activity

该列表Activity显示项目列表,并Activity在单击列表中的项目时显示详细信息。在ListActivity我们观察从数据库获取提要后,我们会更新 UI。

列表页面

feedViewModel.getFeeds().observe(this, Observer { feeds ->
      feeds?.apply {
            feedAdapter.swap(feeds)
            feedAdapter.notifyDataSetChanged()
      }
})
Run Code Online (Sandbox Code Playgroud)

现在我们有一个DetailActivity更新提要(项目)并Activity完成的页面,但更改未反映在ListActivity.

详情页面

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        feedViewModel.setFeedId(id)
        feedViewModel.updateFeed()
}
Run Code Online (Sandbox Code Playgroud)

饲料视图模型

class FeedViewModel(application: Application) : AndroidViewModel(application) {


    private val feedRepository = FeedRepository(FeedService.create(getToken(getApplication())),
            DatabaseCreator(application).database.feedDao())

    /**
     * Holds the id of the feed
     */
    private val feedId: MutableLiveData<Long> = MutableLiveData()

    /**
     * Complete list of feeds …
Run Code Online (Sandbox Code Playgroud)

android android-room android-livedata android-architecture-components

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

使用存储库在本地数据库/位置和网络之间同步

我正在实施一个天气应用程序,它通过 Retrofit 从 DarkSky 获取预报,并从 GoogleFusedLocationClient 获取位置。我的目标是通过应用程序关闭和配置更改来保存 UI 数据。我使用 Room+ViewModel+LiveData 和 Repository 模型实现了它。但是我在片段中而不是在存储库中获取我的位置和预测,目标是将其移动到存储库。
以便存储库查看数据库,如果它是空的,则从网络中获取数据。
我当前的存储库:

public class UIRepository {

    private UIDao mUIDao;
    private LiveData<List<UIData>> mAllUIData;

    UIRepository(Application application) {
        PhotoDatabase db = PhotoDatabase.getDatabase(application);
        mUIDao = db.uiDao();
        mAllUIData = mUIDao.getAllUIData();
    }

    LiveData<List<UIData>> getAllUIData() {
        return mAllUIData;
    }

    public void insert(UIData uiData) {
        new insertAsyncTask(mUIDao).execute(uiData);
    }

    private static class insertAsyncTask extends AsyncTask<UIData, Void, Void> {

        private UIDao mAsyncDao;

        insertAsyncTask(UIDao uiDao) {
            mAsyncDao = uiDao;
        }

        @Override
        protected Void doInBackground(UIData... uiData) {
            mAsyncDao.insert(uiData[0]);
            return …
Run Code Online (Sandbox Code Playgroud)

java android android-fragments android-room android-architecture-components

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

在接收Firebase消息时,在RecyclerView Adapter中添加列表项

我正在使用firebase消息传递服务进行消息传递和通知.我似乎无法将传入的消息从服务传递到适配器,以便在收到消息时可以将其插入到RecycleView列表中.

我尝试使用BroacastIntent如下:

public class messaging extends FirebaseMessagingService {

   @Override
   public void onMessageReceived(RemoteMessage m) {
      store(m.getData());
      broadcastIntent();
   }

   public void broadcastIntent() {
      Intent intent = new Intent();
      intent.setAction("com.myApp.CUSTOM_EVENT");
      sendBroadcast(intent);
   }
}
Run Code Online (Sandbox Code Playgroud)

并在Adpter

public class ConvoAdapter extends RecyclerView.Adapter<ConvoHolder> {

   private List<Message> list;
   private Activity      A;

   public ConvoAdapter(List<Message> data) {

   }

   @Override
   public ConvoHolder onCreateViewHolder(ViewGroup parent, int viewType) {
      View v = LayoutInflater.from(parent.getContext()).inflate(layout, parent, false);
      return new ConvoHolder(v);
   }

   @Override
   public void onBindViewHolder(ConvoHolder h, int Position) {
      final Message M = list.get(Position);
      h.config(A, …
Run Code Online (Sandbox Code Playgroud)

java service android firebase firebase-cloud-messaging

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

如何从last.fm Android获取专辑封面

我正在为Android制作音乐播放器,我想为用户提供功能,以便从last.fm获取一首歌的专辑封面.

我也有我的API密钥.只需要帮助从Last.fm检索图像.

获得图片网址的任何帮助也将不胜感激.

提前致谢.

PS:有关我的音乐播放器的更多信息,请查看以下链接 https://plus.google.com/u/0/communities/115046175816530349000

android albumart audio-player last.fm android-music-player

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