这个问题主要是征求关于处理我的应用程序的最佳方式的意见.我有三个片段由一个活动处理.片段A有一个可点击元素照片,片段B有4个可点击元素按钮.另一个片段只显示单击照片时的详细信息.我正在使用ActionBarSherlock.

前进和后退按钮需要分别将照片更改为下一个或上一个姿势.我可以将照片和按钮保持在相同的片段中,但是想要将它们分开,以防我想在平板电脑中重新排列它们.
我需要一些建议 - 我应该将碎片A和B结合起来吗?如果没有,我将需要弄清楚如何为3个可点击项目实现一个界面.
我考虑过使用Roboguice,但我已经在使用SherlockFragmentActivity进行扩展,所以这是不行的.我看到提到Otto,但我没有看到关于如何包含在项目中的好教程.您认为最佳设计实践应该是什么?
我还需要帮助找出如何在片段和活动之间进行通信.我想在应用程序中保留一些"全局"数据,比如姿势ID.除了股票开发者的信息之外,我还能看到一些示例代码吗?这不是那么有用.
顺便说一下,我已经在SQLite数据库中存储了每个姿势的所有信息.这很容易.
我希望能够在Android KeyStore中安全地存储一些敏感字符串.我从服务器获取字符串但我有一个用例需要我坚持它们.KeyStore只允许从与分配给我的应用程序的UID相同的UID进行访问,并且它将使用设备主密码加密数据,因此我的理解是我不需要进行任何额外的加密来保护我的数据.我的麻烦是,我遗漏了一些关于如何写数据的事情.只要省略对KeyStore.store(null)的调用,我下面的代码就可以完美地工作.该代码失败,只要我将数据放入KeyStore后就无法存储,那么我就无法坚持下去.
我想我错过了关于KeyStore API的一些内容,但我不知道是什么.任何帮助赞赏!
String metaKey = "ourSecretKey";
String encodedKey = "this is supposed to be a secret";
byte[] encodedKeyBytes = new byte[(int)encodedKey.length()];
encodedKeyBytes = encodedKey.getBytes("UTF-8");
KeyStoreParameter ksp = null;
//String algorithm = "DES";
String algorithm = "DESede";
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(algorithm);
SecretKeySpec secretKeySpec = new SecretKeySpec(encodedKeyBytes, algorithm);
SecretKey secretKey = secretKeyFactory.generateSecret(secretKeySpec);
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null);
KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(secretKey);
keyStore.setEntry(metaKey, secretKeyEntry, ksp);
keyStore.store(null);
String recoveredSecret = "";
if (keyStore.containsAlias(metaKey)) {
KeyStore.SecretKeyEntry recoveredEntry = (KeyStore.SecretKeyEntry)keyStore.getEntry(metaKey, ksp);
byte[] bytes …Run Code Online (Sandbox Code Playgroud) 我试过的建议在这里,建议在此情况下,建议在这里,我已经在我的基本活动注释掉onAttachedToWindow().我有两个活动继承自这个类BaseActivity.一个运行,一个不运行.有什么区别?我的目标SDK是19; 将它改为12没有区别.这是我的onCreate for BaseActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onAttachedToWindow();
super.onCreate(savedInstanceState);
....
}
Run Code Online (Sandbox Code Playgroud)
当导航到第二个活动时,单步执行代码,它会通过onCreate(),onResume(),然后崩溃.
可能是什么问题呢?
堆栈跟踪:
06-26 13:41:57.963 28667-28667/com.assistek.ediary E/AndroidRuntime? FATAL EXCEPTION: main
Process: com.assistek.ediary, PID: 28667
java.lang.IllegalArgumentException: Window type can not be changed after the window is added.
at android.os.Parcel.readException(Parcel.java:1550)
at android.os.Parcel.readException(Parcel.java:1499)
at android.view.IWindowSession$Stub$Proxy.relayout(IWindowSession.java:903)
at android.view.ViewRootImpl.relayoutWindow(ViewRootImpl.java:5301)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1507)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254) …Run Code Online (Sandbox Code Playgroud) 我正在使用CasperJS检查一些站点并将JSON数据写入文件.文件应写入public/data文件夹.但是当我试图casperjs 在我的项目目录(例如我的主目录)之外调用时,它直接写入文件~/public/data,而不是在我的项目目录中.
我该怎么解决这个问题?我还没有找到如何获取__dirname或__filename.
我正在尝试将项目导入Android Studio,我收到以下错误:
failed to find Build Tools revision 19.0.0.
查看SDK管理器,我安装了以下构建工具:17,18.1.1和19.
这是我的build.gradle文件:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.6.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
android {
compileSdkVersion 17
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 16
targetSdkVersion 17
}
buildTypes {
release {
runProguard true
proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
}
}
productFlavors {
defaultFlavor {
proguardFile 'proguard-rules.txt'
}
}
}
dependencies {
}
Run Code Online (Sandbox Code Playgroud)
当我将构建版本更改为17.0.0时,它会返回错误,我没有17.0.0.我使用构建版本17.0.0编译了其他项目.
有任何想法吗
我正在使用gradle插件版本3.3.0并且我的gradle包装器正在使用 distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
我在我的app/build.gradle文件中使用以下代码:
applicationVariants.all { variant ->
variant.outputs.each { output ->
def apk = output.outputFile //happens here (line 26)
def newName
if (variant.buildType.name == "release") {
newName = "ediary.apk"
} else {
newName = "ediary-debug.apk"
}
output.outputFileName = new File(
"./build/",
output.outputFile.name)
if (output.zipAlign) {
output.outputFileName = new File(
"./build/",
newName.replace("-unaligned", ""))
}
}
}
Run Code Online (Sandbox Code Playgroud)
该项目构建,但我收到此警告:
警告:API
'variantOutput.getPackageApplication()'已过时且已替换为'variant.getPackageApplicationProvider()'.它将在2019年底删除.有关更多信息,请参阅https://d.android.com/r/tools/task-configuration-avoidance.原因:来自:C:\ Users\my name\StudioProjects\core\app\build.gradle:26
我如何重写这个以避免警告?
我正在使用sqlite.我成功创建了数据库和表.我还编写了可以在我的表中插入新值的代码.我的代码工作正常,但现在我想显示例如:如果插入新值,则显示toast消息,否则在toast或其他内容中显示错误消息.这是我对表源代码的插入:
public void InsertToPhysicalPersonTable(String FirstName, String LastName,
String FullName, String FatherName) {
try {
ContentValues newValues = new ContentValues();
newValues.put("FirstName", FirstName);
newValues.put("LastName", LastName);
newValues.put("FullName", FullName);
newValues.put("FatherName", FatherName);
db.insert(AddNewPhysicalPerson, null, newValues);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
Toast.makeText(myContext, "Something wrong", Toast.LENGTH_SHORT).show();
}
}
Run Code Online (Sandbox Code Playgroud)
我这样调用我的函数:
loginDataBaseAdapter.InsertToPhysicalPersonTable("FirstName",
"LastName",
"FullName",
"FatherName"
);
Run Code Online (Sandbox Code Playgroud)
如果有人知道解决方案,请帮助我.谢谢
我想用android中的RxJava替换我的AsyncTask.我目前的AsyncTask是这样的:
public class ProgressBarAsyncTask extends AsyncTask<Void,Void,Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
ringProgressDialog = ProgressDialog.show(context,"MyProgressBarTitle","Working please wait",true, false);
}
@Override
protected Void doInBackground(Void... void) {
//do work
myTask();
return null;
}
@Override
protected void onPostExecute(Void void) {
super.onPostExecute();
ringProgressDialog.dismiss();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的RxJava替代品:
public static Observable<Void> getObservable(final Context context,final String... params) {
return Observable.defer(new Func0<Observable<Void>>() {
@Override
public Observable<Void> call() {
return Observable.just(myTask());
}
});
}
public static Subscriber<Void> getSubscriber() {
Subscriber<Void> subscriber = new Subscriber<Void>() {
@Override
public void …Run Code Online (Sandbox Code Playgroud) 我正在使用模拟运行单元测试。当尝试验证方法时,我收到断言错误,并且不知道如何运行测试。这是我的测试方法:
@get:Rule
var rule: TestRule = InstantTaskExecutorRule()
val autoDownloadsManager = mockk<AutoDownloadsManager>(relaxed = true)
@Test
fun `remove downloads when`() {
every { autoDownloadsManager.downloadsNeedsToBeDeletedOnFinishPlay(any(), any()) } just Runs
verify(exactly = 1) { autoDownloadsManager.downloadsNeedsToBeDeletedOnFinishPlay(any(), any()) }
}
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
java.lang.AssertionError: Verification failed: call 1 of 1: AutoDownloadsManager(#1).downloadsNeedsToBeDeletedOnFinishPlay(any(), any())) was not called
at io.mockk.impl.recording.states.VerifyingState.failIfNotPassed(VerifyingState.kt:66)
at io.mockk.impl.recording.states.VerifyingState.recordingDone(VerifyingState.kt:42)
at io.mockk.impl.recording.CommonCallRecorder.done(CommonCallRecorder.kt:47)
at io.mockk.impl.eval.RecordedBlockEvaluator.record(RecordedBlockEvaluator.kt:60)
at io.mockk.impl.eval.VerifyBlockEvaluator.verify(VerifyBlockEvaluator.kt:30)
at io.mockk.MockKDsl.internalVerify(API.kt:118)
at io.mockk.MockKKt.verify(MockK.kt:139)
at io.mockk.MockKKt.verify$default(MockK.kt:136)
at media.luminary.datastore.downloads.AutoDownloadsTest.remove downloads when(AutoDownloadsTest.kt:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) …Run Code Online (Sandbox Code Playgroud) 我正在尝试将查询中的数据导出到安装在Windows Server 2008计算机上的Oracle Enterprise Express的csv文件中.
我找到了这个解决方案:
http://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:235814350980
它基本上编写一个函数并使用UTIL_FILE对象来创建和写入文件并添加分隔符.
当我尝试在Oracle SQL Developer中创建函数时收到以下错误:
PLS-00201: identifier UTIL_FILE must be declared.
Run Code Online (Sandbox Code Playgroud)
当我运行以下命令时:
select owner, object_type from all_objects where object_name = 'UTL_FILE'
Run Code Online (Sandbox Code Playgroud)
结果是:
OWNER Object Type
--------- -----------
PUBLIC SYNONYM
Run Code Online (Sandbox Code Playgroud)
编辑:
运行:
GRANT EXECUTE ON UTL_FILE TO PUBLIC
Run Code Online (Sandbox Code Playgroud)
得到:
Error starting at line 2 in command:
GRANT EXECUTE ON UTL_FILE TO PUBLIC
Error report:
SQL Error: ORA-00942: table or view does not exist
00942. 00000 - "table or view does not exist"
*Cause:
*Action:
Run Code Online (Sandbox Code Playgroud)
问题是什么?