您将如何编写Map的TypeConverter?我的方法是由Moshi来做
class Converters() {
val moshi = Moshi
.Builder()
.add(KotlinJsonAdapterFactory())
.build()
val mapOfStringsType = Types.newParameterizedType(Map::class.java, String::class.java, String::class.java)
val mapOfStringsAdapter = moshi.adapter<Map<String, String>>(mapOfStringsType)
@TypeConverter
fun stringToMap(data: String): Map<String, String> {
return mapOfStringsAdapter.fromJson(data).orEmpty()
}
@TypeConverter
fun mapToString(map: Map<String, String>): String {
return mapOfStringsAdapter.toJson(map)
}
}
Run Code Online (Sandbox Code Playgroud)
但是,它闻起来是因为我无法通过Converters()构造函数注入Moshi 。而且,恐怕也不是最好的表现。
android android-room android-architecture-components android-jetpack
我是android体系结构组件的新手,我对它一点也不困惑viewmodel。我正在构建一个从服务器获取项目列表并在布局中显示为列表的应用程序。我已经在Repository课堂上实现了网络通话。
Repository.java:
//Get list of top rated movies
public LiveData<NetworkResponse> getTopRatedMovies() {
final MutableLiveData<NetworkResponse> result = new MutableLiveData<>();
ApiService api = retrofit.create(ApiService.class);
Call<MovieData> call = api.getTopRateMovies("api_key");
call.enqueue(new Callback<MovieData>() {
@Override
public void onResponse(Call<MovieData> call, Response<MovieData> response) {
result.postValue(new NetworkResponse(response.body()));
}
@Override
public void onFailure(Call<MovieData> call, Throwable t) {
Log.e(TAG, t.getLocalizedMessage());
result.postValue(new NetworkResponse(t));
}
});
return result;
}
Run Code Online (Sandbox Code Playgroud)
现在在ViewModel课堂上我正在这样做:
public class MovieListViewModel extends ViewModel {
public LiveData<NetworkResponse> result, topRatedMovies;
public LiveData<List<MovieEntity>> favoriteMovies;
private Repository repository; …Run Code Online (Sandbox Code Playgroud) android android-livedata android-viewmodel android-architecture-components android-jetpack
我试图制作一个在按钮点击时播放特定声音的应用程序,我得到了静态创建的100个按钮,不是在数组或任何东西,我正确地分配了每个按钮的声音问题是,在播放了一些按钮之后我的错误是我的问题
以下是我的代码:
package com.example.buttonsdemo;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button messageButton_0 = (Button) findViewById(R.id.akali);
final MediaPlayer mpButtonClick_0= MediaPlayer.create(this,R.raw.akali) ;
messageButton_0.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
mpButtonClick_0.start();
if(!mpButtonClick_0.isPlaying()){
mpButtonClick_0.stop();
mpButtonClick_0.release();
}
}
});
Run Code Online (Sandbox Code Playgroud)
它继续这样100个按钮或任何帮助PLZ
Logcat:
03-04 16:21:21.925: E/MediaPlayer(5769): error (-19, 0)
03-04 16:21:21.925: E/MediaPlayer(5769): stop called in state 0
03-04 16:21:21.925: …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 安排任务在特定时间运行WorkManager。我之所以使用它beginUniqueWork,是因为我只想为该特定 ID (uniqueWorkName) 一次安排一项任务。但enqueue多次调用后,有时会出现以下错误:
java.lang.IllegalStateException: Apps may not schedule more than 100 distinct jobs
at android.os.Parcel.readException(Parcel.java:2012)
at android.os.Parcel.readException(Parcel.java:1950)
at android.app.job.IJobScheduler$Stub$Proxy.schedule(IJobScheduler.java:180)
at android.app.JobSchedulerImpl.schedule(JobSchedulerImpl.java:44)
at androidx.work.impl.background.systemjob.SystemJobScheduler.scheduleInternal(SystemJobScheduler.java:85)
at androidx.work.impl.background.systemjob.SystemJobScheduler.schedule(SystemJobScheduler.java:64)
at androidx.work.impl.Schedulers.scheduleInternal(Schedulers.java:98)
at androidx.work.impl.Schedulers.schedule(Schedulers.java:69)
at androidx.work.impl.WorkManagerImpl.rescheduleEligibleWork(WorkManagerImpl.java:398)
at androidx.work.impl.utils.ForceStopRunnable.run(ForceStopRunnable.java:66)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
Run Code Online (Sandbox Code Playgroud)
当我在 every 之后使用以下代码片段记录待处理作业的数量时enqueue,我注意到每次调用都会有 3 个新作业添加到列表中(虽然我预计总数会保持在 1)。
JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
int size = jobScheduler.getAllPendingJobs().size();
Run Code Online (Sandbox Code Playgroud)
这是我用来安排任务的代码:
val work = OneTimeWorkRequest.Builder(workerClass)
.setInitialDelay(offset, TimeUnit.MILLISECONDS)
.build()
WorkManager.getInstance()
.beginUniqueWork(uniqueNameForTask, ExistingWorkPolicy.REPLACE, work)
.enqueue()
Run Code Online (Sandbox Code Playgroud)
这里看起来有什么不对劲吗?我缺少什么?
android android-jobscheduler android-jetpack android-workmanager
我正在创建一个 android 应用程序,它是一个方言词典。我的问题是我不知道如何在数据库中存储 audio.mp3 文件。
任何人都可以教我或分享一些如何制作它的代码吗?
当我尝试以下操作时,媒体播放器无法正常工作:
player=MediaPlayer.create(this, R.raw.mh);
player.start();
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
MediaPlayer类型中的方法create(Context,int)不适用于参数(new View.OnClickListener(){},int)