我在Room使用Relation添加了一对多的关系.我在这篇文章中提到了在Room中为关系编写以下代码.
该帖子告诉如何从数据库中读取值,但将实体存储到数据库中导致userId为空,这意味着两个表之间没有关系.
我不知道什么是理想的途径,insert一个User并List 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) 我正在使用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工作室爱好者......
Android监视器中有一个很棒的插件是SCHREEN CAPTURE ,如下图所示.
它非常适合捕获模拟器屏幕.
在屏幕截图中有一个选项框架截图,我可以选择我的屏幕截图框架设备.
但是只有4个设备列表
如何添加更多设备框架.
有什么办法吗?
等待你的建议.
注意:我不希望预览选项卡中的xml屏幕截图,因为它不是运行时屏幕.
我有一个存储库,用于存放LiveData对象并由两者使用Activity,现在需要JobService(从Firebase调度程序)到ViewModel.
这里有简单的答案Service:从前台服务观察LiveData
但它没有提到如何做同样的事情JobService.
android android-service android-jobscheduler android-livedata android-architecture-components
我想类似的设置UI测试GithubBrowserSample,它看起来像示例项目只有模仿ViewModel的Fragment,但不是一个例子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
我很多天都在尝试制作一个搜索栏,在搜索栏上显示一个内部有进展的泡沫.如Google Design中所示: Sliders
我也很难在Google设计指南中查看Seekbar
我正在使用新的Android设计库和自动隐藏Toolbar功能.目前滚动上的自动隐藏工作正常.但是有了这个问题,请看下面的截图
正如你所看到的那样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)
我也试过太多添加margin和padding底部工作,但当列表滚动它太过分了.
最好的事情是当我玩的时候AppBarLayout停止滚动的自动隐藏Toolbar然后FloatingActionButton看起来很好.
android android-toolbar android-design-library android-appbarlayout
我有 2 个Activity可视化
ActivityActivity该列表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
我正在实施一个天气应用程序,它通过 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
我正在使用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) 我正在为Android制作音乐播放器,我想为用户提供功能,以便从last.fm获取一首歌的专辑封面.
我也有我的API密钥.只需要帮助从Last.fm检索图像.
获得图片网址的任何帮助也将不胜感激.
提前致谢.
PS:有关我的音乐播放器的更多信息,请查看以下链接 https://plus.google.com/u/0/communities/115046175816530349000
android ×11
android-architecture-components ×5
android-room ×3
java ×2
albumart ×1
audio-player ×1
firebase ×1
kotlin ×1
last.fm ×1
lockscreen ×1
screenshot ×1
service ×1