小编Kri*_*lsh的帖子

在片段和活动之间进行通信 - 最佳实践

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

屏幕截图

前进和后退按钮需要分别将照片更改为下一个或上一个姿势.我可以将照片和按钮保持在相同的片段中,但是想要将它们分开,以防我想在平板电脑中重新排列它们.

我需要一些建议 - 我应该将碎片A和B结​​合起来吗?如果没有,我将需要弄清楚如何为3个可点击项目实现一个界面.

我考虑过使用Roboguice,但我已经在使用SherlockFragmentActivity进行扩展,所以这是不行的.我看到提到Otto,但我没有看到关于如何包含在项目中的好教程.您认为最佳设计实践应该是什么?

我还需要帮助找出如何在片段和活动之间进行通信.我想在应用程序中保留一些"全局"数据,比如姿势ID.除了股票开发者的信息之外,我还能看到一些示例代码吗?这不是那么有用.

顺便说一下,我已经在SQLite数据库中存储了每个姿势的所有信息.这很容易.

android communication android-fragments android-activity

55
推荐指数
5
解决办法
11万
查看次数

如何使用Android KeyStore安全存储任意字符串?

我希望能够在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)

android android-keystore

43
推荐指数
3
解决办法
3万
查看次数

IllegalArgumentException:添加窗口后无法更改窗口类型

我试过的建议在这里,建议在此情况下,建议在这里,我已经在我的基本活动注释掉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)

android android-windowmanager android-activity

21
推荐指数
1
解决办法
1万
查看次数

如何在CasperJS中获取当前执行的文件目录

我正在使用CasperJS检查一些站点并将JSON数据写入文件.文件应写入public/data文件夹.但是当我试图casperjs 在我的项目目录(例如我的主目录)之外调用时,它直接写入文件~/public/data,而不是在我的项目目录中.

我该怎么解决这个问题?我还没有找到如何获取__dirname或__filename.

phantomjs casperjs

13
推荐指数
2
解决办法
6162
查看次数

Android Studio构建错误:找不到Build Tools修订版19.0.0

我正在尝试将项目导入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编译了其他项目.

有任何想法吗

android-studio build.gradle android-gradle-plugin

13
推荐指数
1
解决办法
2万
查看次数

我刚刚升级了gradle,我收到一个关于过时通话的警告.怎么修?

我正在使用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

我如何重写这个以避免警告?

android gradle android-build android-studio

12
推荐指数
1
解决办法
846
查看次数

android sqlite检查是否插入新值

我正在使用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)

如果有人知道解决方案,请帮助我.谢谢

t-sql database sqlite android

9
推荐指数
1
解决办法
2万
查看次数

我想像使用AsyncTask一样使用RxJava的进度条

我想用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)

android progressdialog android-asynctask rx-java

9
推荐指数
2
解决办法
6927
查看次数

mockk java.lang.AssertionError:验证失败:调用 1 of 1:未调用

我正在使用模拟运行单元测试。当尝试验证方法时,我收到断言错误,并且不知道如何运行测试。这是我的测试方法:

@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)

android unit-testing mockk

9
推荐指数
1
解决办法
2万
查看次数

PLS-00201:必须声明标识符UTIL_FILE

我正在尝试将查询中的数据导出到安装在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)

问题是什么?

sql oracle

8
推荐指数
2
解决办法
3万
查看次数