我需要在我的Android应用程序中实现水平列表视图.我做了一些研究并遇到了如何在Android中制作水平ListView?和Android中的水平ListView?然而,这些问题是在Recyclerview发布之前提出的.现在使用Recyclerview有更好的方法来实现吗?
我试图找出一种方法,可以在gradle中更改每个构建类型的应用程序的应用程序名称.
例如,我想调试版本<APP_NAME>-debug和qa版本<APP-NAME>-QA.
我熟悉:
debug {
applicationIdSuffix '.debug'
versionNameSuffix '-DEBUG'
}
Run Code Online (Sandbox Code Playgroud)
但是,我似乎无法在启动器中找到应用更改应用程序的gradle命令.
在查看Android Studio的Analyze选项卡中的各种选项时,我遇到了一个名为"推断无效"的选项.我很好奇这个工具应该如何使用以及它能为我的Android Studio项目做些什么?
我正在测试一个Android应用程序,它在低质量网络上管理其内容时遇到一些问题.我无法验证问题是否仍然存在,因为我家中的网络速度(120mb/s),在我设法启动再现路由之前,所有内容都已经下载.在这种情况下,使用Android模拟器不是一个选项,因为再现路径需要非常快速的操作来显示问题.
我知道iOS具有允许用户限制网络状况的功能,但我无法找到适合Android的类似工具.
TL; DR
有没有办法在实际的Android设备上模拟糟糕的网络状况?
我目前设置了Travis-CI,以便在我的Android设备的每个版本上运行gradle ConnectedCheck任务并执行我的所有单元测试.我已经能够成功地设置它.我现在正在尝试用Espresso构建一些功能测试,我目前遇到很多困难,设置Travis的方式使我的espresso测试可以与Travis的模拟器交互.如何设置Travis以使其模拟器的工作方式与我在本地工作站上使用的模拟器完全相同?
这是我用来构建模拟器的.travis.yml的一部分.
language: android
jdk: oraclejdk7
env:
matrix:
- ANDROID_TARGET=android-19 ANDROID_ABI=armeabi-v7a
android:
components:
- build-tools-20.0.0
- build-tools-19.1.0
before_script:
# Create and start emulator
- echo no | android create avd --force -n test -t $ANDROID_TARGET --abi $ANDROID_ABI
- emulator -avd test -no-skin -no-audio -no-window &
- android-wait-for-emulator
- adb shell input keyevent 82 &
Run Code Online (Sandbox Code Playgroud) 我有一个Viewpager,它由相同片段视图的副本组成.你可以在它们之间滑动.我正在编写一个Espresso测试并试图断言每个页面的ID,但它们显然是模棱两可的,因为加载了多个页面并且它们都共享相同的ID.我不想将视图寻呼机更改为一次只加载1页.在我的应用程序中,这样做效率很低.
我还想过使用标签并使用唯一的字符串标记每个视图,但之后我只修改源代码以便我的测试工作.我不喜欢那样.使用Espresso检查viewpager页面内容的正确方法是什么?
每次我尝试进行gradle构建时,我都会收到此错误消息.我最近在此之前进行了构建,并且创建了应用程序而没有任何问题.我没有对build.gradle文件进行任何更改.是什么造成的?
:app:preBuild
......
:app:processDebugResources
:app:generateDebugSources
:app:compileDebugJava FAILED
Error:Execution failed for task ':app:compileDebugJava'.
> java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)
我使用的是Android Studio 0.8.1版
这是gradle stacktrace:
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:compileDebugJava'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:289)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:86)
at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:67)
at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:54)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:166)
at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113)
at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:81)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:64) …Run Code Online (Sandbox Code Playgroud) 是否可以使用Butterknife注入测试类的视图?视图被注入到由MainActivity类创建和提交的片段中.
这是我的测试类的代码:
public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {
private MainActivity mMainActivity;
private Button learnButton;
private Button teachButton;
@SuppressWarnings( "deprecation" )
public MainActivityTest() {
super("com.example.application.app", MainActivity.class);
}
protected void setUp() throws Exception {
super.setUp();
mMainActivity = getActivity();
learnButton = (Button) mMainActivity.findViewById(R.id.buttonLearn);
teachButton = (Button) mMainActivity.findViewById(R.id.buttonTeach);
}
Run Code Online (Sandbox Code Playgroud)
但是我使用Butterknife在我的片段中注入视图:
public class ChooseActionFragment extends Fragment {
@InjectView(R.id.buttonTeach) Button buttonTeach;
@InjectView(R.id.buttonLearn) Button buttonLearn;
public ChooseActionFragment() { }
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
ButterKnife.inject(this, rootView); …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Glide在Listview中加载一些图像.如果我在加载图像时不使用占位符,则图像会正确加载.但是,当我尝试设置占位符时,我通过网络加载的图像显示为拉伸.这仅在使用占位符图像的情况下发生.如果我要离开屏幕并返回(这样就不会加载占位符图像),那么图像就会正确显示.
这是我简单的Glide实现:
Glide.with(context)
.load(url)
.placeholder(R.drawable.empty_logo)
.error(R.drawable.error)
.into(imageView);
Run Code Online (Sandbox Code Playgroud) 我有一个通过ORM保存到数据库的对象.该对象有一个字符串数组,数组长度可以根据对象而变化.我想知道在数据库中存储String数组的标准做法(例如,我应该将所有字符串存储在一个字段中作为csv等.)?
android ×9
butterknife ×1
dagger ×1
database ×1
gradle ×1
limit ×1
networking ×1
orm ×1
ormlite ×1
performance ×1
travis-ci ×1