从今天早上开始,我在所有应用程序构建中都遇到以下错误:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':MyProject:transformClassesWithInstantRunVerifierForQaDebug'.
> tried to access method com.google.common.io.Files.fileTreeTraverser()Lcom/google/common/collect/TreeTraverser; from class com.android.build.gradle.internal.transforms.InstantRunVerifierTransform
* Try:
Run with --debug option to get more log output. Run with --scan to get full insights.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':MyProject:transformClassesWithInstantRunVerifierForQaDebug'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34) …Run Code Online (Sandbox Code Playgroud) 我有一个自定义按钮,我正在捕获它的onTouchEvent.
public class CustomNumber extends ToggleButton {
boolean drawGlow = false;
float glowX = 0;
float glowY = 0;
float radius = 30;
public CustomNumber(Context context) {
super(context);
}
public CustomNumber(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomNumber(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
Paint paint = new Paint();
{
paint.setAntiAlias(true);
paint.setColor(Color.WHITE);
paint.setAlpha(70);
};
@Override
public void draw(Canvas canvas){
super.draw(canvas);
if(drawGlow)
canvas.drawCircle(glowX, glowY, radius, paint);
}
@Override
public boolean onTouchEvent(MotionEvent event){
if(event.getAction() == MotionEvent.ACTION_DOWN){ …Run Code Online (Sandbox Code Playgroud) 假设我有片段A,从中打开DialogFragment像这样的片段:
FragmentActivity fragmentActivity = (FragmentActivity) view.getContext();
FragmentTransaction ft = fragmentActivity.getSupportFragmentManager().beginTransaction();
Fragment prev = fragmentActivity.getSupportFragmentManager().findFragmentByTag("dialog");
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);
DialogFragment fragmentDialog = MyDialogFragment.newInstance();
fragmentDialog.show(ft, "dialog");
Run Code Online (Sandbox Code Playgroud)
在此对话框中,单击(正/中性/负)按钮后,我要打开片段B,该片段应替换片段A。
在对话框的onClick方法中,我运行父活动的回调方法:
@Override
public void onClick(DialogInterface dialog, int which) {
switch(which) {
case DialogInterface.BUTTON_NEUTRAL:
detailsCallbacks.openMoreDetails();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
最后,我的Activity的openMoreDetails()方法如下所示:
@Override
public void openMoreDetails() {
Fragment fragmentB = Fragment.newInstance();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, fragmentB);
ft.addToBackStack(null);
ft.commit();
}
Run Code Online (Sandbox Code Playgroud)
我得到的是奇怪的。片段B在屏幕上闪烁仅几分之一秒,然后再次被片段A替换(覆盖?)。
当我单击向上按钮时,我什至从片段A取回,因此这些事务中的任何一个都未添加到后台堆栈中。我想显示片段B,然后按向上按钮回到片段A。
有可能吗?我的方法有什么问题?
我正在使用 Google API Java 客户端http://code.google.com/p/google-api-java-client/并且能够成功获取 Android 的访问令牌。
// Google Accounts
credential = GoogleAccountCredential.usingOAuth2(this, CalendarScopes.CALENDAR);
SharedPreferences settings = getPreferences(Context.MODE_PRIVATE);
credential.setSelectedAccountName(settings.getString(PREF_ACCOUNT_NAME, null));
Run Code Online (Sandbox Code Playgroud)
由于我希望我的 Web 服务器进行离线 API 调用,因此我需要一个刷新令牌。我一直在广泛搜索,但还没有想出如何做到这一点。
理想情况下,我更喜欢在 WebView 上使用 Google API Java 客户端来获取刷新令牌(无需输入用户名或密码)。
任何帮助,将不胜感激!
google-api-java-client google-oauth google-oauth-java-client
我的应用程序中有官方导航抽屉.单击抽屉中的项目会在屏幕的内容部分中打开新的片段.每个片段包含FrameLayout相同的id,用于显示Crouton.
基本用法是当用户单击Action Bar中的刷新按钮时显示无限的Crouton(通知正在进行的刷新).刷新完成后,会显示另一个烤面包片(替换旧的烤面包片).在某些情况下,即使在输入屏幕后也会显示Croutons(并在触发刷新时替换).
我遇到的问题有点难以描述.有些面包丁不时不显示.(初始Crouton未示出或当我按下刷新按钮的第一次在该屏幕上未示出的Crouton -然而,它通常当我屏幕间切换发生被显示时刷新结束,当我之后按下刷新按钮) .
所以这是非常不可预测的.甚至有些情况下,当我切换到另一个屏幕并返回时,屏幕根本不显示Crouton.
为了显示Croutons,我在每个Framgnet的布局中使用它:
<FrameLayout
android:id="@+id/crouton_view"
android:layout_width="match_parent"
android:layout_height="@dimen/crouton_height"
android:layout_alignParentTop="true" />
Run Code Online (Sandbox Code Playgroud)
在代码中我有CroutonBuilder类,有以下方法:
public static Crouton getNewLastUpdateCrouton(Activity activity, boolean infinite, String plateNumber) {
String lastUpdateString = ...;
Crouton newCrouton = Crouton.makeText(activity, lastUpdateString, CroutonBuilder.getLastUpdate(activity),
R.id.crouton_view);
if (infinite) {
newCrouton.setConfiguration(new Configuration.Builder().setDuration(
Configuration.DURATION_INFINITE).build());
}
return newCrouton;
}
Run Code Online (Sandbox Code Playgroud)
然后只需要调用.show()返回的Crouton.当我调试并逐步执行时,show()调用该方法,但有时只显示任何内容.
你有什么想法我做错了吗?
为什么 在Manifest中允许xxhdpi 和 xxxhdpi 不允许 元素screenDensity 参数的 值<screen> ?
我正在尝试使用官方Android开发者网站推荐的解决方案限制我在平板电脑上使用我的应用程序- 声明应用程序仅适用于手机.我想只标记小尺寸和普通屏幕尺寸(任何密度)兼容:
<compatible-screens>
<!-- all small size screens -->
<screen
android:screenDensity="ldpi"
android:screenSize="small" />
<screen
android:screenDensity="mdpi"
android:screenSize="small" />
<screen
android:screenDensity="hdpi"
android:screenSize="small" />
<screen
android:screenDensity="xhdpi"
android:screenSize="small" />
<!-- all normal size screens -->
<screen
android:screenDensity="ldpi"
android:screenSize="normal" />
<screen
android:screenDensity="mdpi"
android:screenSize="normal" />
<screen
android:screenDensity="hdpi"
android:screenSize="normal" />
<screen
android:screenDensity="xhdpi"
android:screenSize="normal" />
</compatible-screens>
Run Code Online (Sandbox Code Playgroud)
但是,添加
<screen
android:screenDensity="xxhdpi"
android:screenSize="normal" />
Run Code Online (Sandbox Code Playgroud)
不被允许.不编译用Error: String types not allowed (at 'screenDensity' with value …
我正在使用以下代码将字体大小更改为中、高或小。getFontSize()将返回任何这些尺寸
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
holder.title.setTextAppearance(new AppController().getFontSize());
else
holder.title.setTextAppearance(mContext, new AppController().getFontSize());
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
java.lang.NoSuchMethodError: No virtual method setTextAppearance(I)V in class Landroid/widget/TextView; or its super classes (declaration of 'android.widget.TextView' appears in /system/framework/framework.jar)
Run Code Online (Sandbox Code Playgroud)
为什么我会收到这样的错误?
Android 7.0 Nougat添加了Data Saver功能,允许用户限制某些应用的背景数据(包括推送通知).当Data Saver为ON时,仅列出列表中的应用程序
设置→数据保护→无限制数据访问
允许接收推送通知并执行后台网络呼叫.如果Data Saver处于关闭状态且您的应用程序不在非限制列表中,则非常类似于禁用设置推送通知.
我的应用程序中有一个用例,它正在等待推送通知.
我想知道是否有办法找出数据保护程序是否已启用,如果我的应用程序位于"无限制数据访问"列表中,可能知道是否为我的应用程序启用了推送通知,因此是否有一点等待当应用程序在特定时间处于后台时,推送并有机会执行任何网络呼叫.
我尝试在 Kotlin 模型类中生成 Getters 和 Setters,而无需手动编写代码,但选项未显示在 Android Studio 的“生成”菜单中。
我的模型类 (Kotlin)
import com.google.gson.annotations.Expose
import com.google.gson.annotations.SerializedName
public class EventsRoadSummaryAPINodeModel {
@SerializedName("road_name")
@Expose
var road_name: String? = null
@SerializedName("locality")
@Expose
var locality: String? = null
@SerializedName("postcode")
@Expose
var postcode: String? = null
@SerializedName("local_government_area")
@Expose
var local_government_area: String? = null
@SerializedName("district")
@Expose
var district: String? = null
}
Run Code Online (Sandbox Code Playgroud)
请问如何在 Kotlin 类中生成 getter 和 setter?
我只是在不使用Context内部doInBackground()发现背后的事实是什么。实际上,我们不能直接更新doInBackground()内部的UI,要更新doInBackground()内部的UI,我们必须通过publishProgress()负责调用的方法来调用其他线程onProgressUpdate()。
简而言之,我只想知道UI thread和之间的化学反应AsyncTask,以及为什么AsyncTask在UI Thread中执行。