小编mit*_*rop的帖子

Android单元测试:如何清除SharedPreferences

我试图清除我测试期间添加的所有SharedPreferences.我已经阅读了一些帖子和官方文档(SharedPreferences.Editor.clear()).但是当我运行单元测试后启动应用程序时,我仍然找到了测试值.

所以,在AndroidTestCase.tearDown()中,我这样做:

public class PrivateStorageUtilsTest extends AndroidTestCase {

private static final String KEY_SP_PACKAGE = "PrivateStorageUtilsTest";

    protected void setUp() throws Exception {
        super.setUp();

        // Clear everything in the SharedPreferences
        SharedPreferences sharedPreferences = getContext()
            .getSharedPreferences(KEY_SP_PACKAGE, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.clear();
        editor.commit();
    }

    protected void tearDown() throws Exception {
        // Clear everything in the SharedPreferences
        SharedPreferences sharedPreferences = getContext().
            getSharedPreferences(KEY_SP_PACKAGE, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.clear();
        editor.commit();
    }

}
Run Code Online (Sandbox Code Playgroud)

我在SO上发现的所有其他问题都是关于commit()clear()我已经完成的之后添加的问题.

编辑1添加setUp()方法 …

android unit-testing sharedpreferences android-testing

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

使用Singleton设计模式正确打开/关闭数据库

我正在创建一个与数据库进行大量交互的应用程序(读写操作).

为了避免在每个请求中打开/关闭操作,我创建了SQLiteOpenHelper一个使用Singleton设计模式扩展的类.这样,我确信SQLiteOpenHelper在整个应用程序生命周期(而不仅仅是活动生命周期)中,只有一个与数据库建立连接的实例.

我还阅读了一些关于ContentProvider的文章,但我不确定这是一个更好的方法.

所以,这是我的Singleton类的主要逻辑(onCreateonUpgrade删除):

public final class BaseSQLite extends SQLiteOpenHelper {

    private static BaseSQLite mInstance = null;

    private SQLiteDatabase db = null;

    public static BaseSQLite getInstance(Context context) {
        if (mInstance == null) {
            mInstance = new BaseSQLite(context.getApplicationContext(),
                    DBNAME, DBVERSION);
        }
        return mInstance;
    }

    private BaseSQLite(final Context context, final String name,
            final int version) {
        super(context, name, null, version);
        db = getWritableDatabase();
    }

    @Override
    public synchronized void close() { …
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle sqliteopenhelper android-sqlite

14
推荐指数
1
解决办法
8486
查看次数

如何使用ParseFile将ParseObject固定到OFFLINE中的解析本地数据存储区?

我使用以下代码将ParseObject与ParseFile一起存储.我在Application子类中启用了Parse本地数据存储区.当应用程序连接到Internet时,此代码将ParseObject的实例存储在本地数据存储区和解析服务器中.

final ParseFile file = new ParseFile(position + ".mp4", data);
    file.saveInBackground(new SaveCallback() {

        @Override
        public void done(ParseException e) {
            ParseObject po = new ParseObject("Recordings");
            po.put("code", position);
            po.put("name", myname);
            po.put("file", file);
            po.saveEventually();                
        }
    });
Run Code Online (Sandbox Code Playgroud)

当应用未连接到互联网时,相同的代码会抛出以下异常.java.lang.IllegalStateException:无法编码未保存的ParseFile.应用程序崩溃了.对象未存储在本地数据存储中.

那么当没有互联网时,如何在解析本地数据存储区中存储带有ParseFile的ParseObject?

android parse-platform

6
推荐指数
1
解决办法
4131
查看次数

Sonar,Gradle和Android返回0期

问题

我有一个编译并正常工作的Android项目.它由Gradle"管理"并不断与Jenkins一起构建.我想用Sonar分析我的代码质量.

声纳分析是使用sonarRunnerGradle任务完成的.问题是,声纳仍然告诉我有"0问题"......(我可以确保你有错误......我自己加一个以确保......).但是,它给了我其他信息,例如:代码行数,类数,注释和文档百分比,重复百分比,复杂性......就像Android Lint没有运行一样.

我尝试了什么

lint 奇迹般有效... :

Ran lint on variant arm发布:找到153个问题

Ran lint on variant armDebug:发现153个问题

Ran lint on variant x86Debug:找到153个问题

Ran lint on variant x86Release:发现153个问题

我尝试了很多我通过互联网阅读的内容和SO:

我有一些不同的错误,如"类'android/content/res/Resources'无法通过ClassLoader访问." 或其他什么,但我从来没有能够得到正确的报告).

细节

项目结构

- myProjectName
    | build
    | libs
    | src
        | debug
        | main
            | assets
            | java
                | com.myPackage...
            | jniLibs
            | res
            | AndroidManifest.xml
        | release
    | build.gradle
    | gradle.properties
    | settings.gradle
Run Code Online (Sandbox Code Playgroud)

settings.gradle


gradle.properties


build.gradle(删除了无用的部分)

buildscript {
    repositories { …
Run Code Online (Sandbox Code Playgroud)

android gradle sonarqube

5
推荐指数
1
解决办法
1317
查看次数

C++ DLL和C#代码之间的共享内存

我目前正在开展一个截止日期很短的项目,所以我没有太多时间去理解一切.另外,我不是 C++开发和内存管理方面的专家.

所以,我想要做的是用C和C++代码创建一个DLL.然后,我想用C#代码调用这个DLL.目前,C++和C#之间的通信还可以.当我尝试将字符串从DLL传输到C#代码时出现问题.错误是这一个:

System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
   at Microsoft.Win32.Win32Native.CoTaskMemFree(IntPtr ptr)
   at System.StubHelpers.CSTRMarshaler.ClearNative(IntPtr pNative)
   at NMSPRecognitionWrapper.Program.GetResultsExt()
   at NMSPRecognitionWrapper.Program.<Main>b__0() in <my dir>\Program.cs:line 54
   at NMSPRecognitionWrapper.Program.StartRecognitionExt()
   at NMSPRecognitionWrapper.Program.Main(String[] args) in <my dir>\Program.cs:line 60
Run Code Online (Sandbox Code Playgroud)

另外,我可以在下面给你一些代码(真的很简单!).实际上,C++公开了两种方法:StartRecognition()启动操作以从麦克风获取一些数据,然后处理它们并存储结果.GetResults()返回先前存储的结果的实例.在WrapperCallback()允许时,结果是能够进行处理,从而被称为C#一部分.调用Callback时,C#部分将要求使用该GetResults()方法获取结果.

我知道这个架构在这个演示文稿中可能看起来真的不合适,但我不想解释整个项目来验证模型,请确保一切正确.

要完成,问题是当C#回调调用该GetResults()方法时.尝试访问resultsForCSC#似乎是不可能的.

C++ part - header

// NMSPRecognitionLib.h

#pragma once
#include <iostream>

using namespace std;

extern "C" __declspec(dllexport) char* GetResults();
extern "C" …
Run Code Online (Sandbox Code Playgroud)

c# c++

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