我试图清除我测试期间添加的所有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()
方法 …
我正在创建一个与数据库进行大量交互的应用程序(读写操作).
为了避免在每个请求中打开/关闭操作,我创建了SQLiteOpenHelper
一个使用Singleton设计模式扩展的类.这样,我确信SQLiteOpenHelper
在整个应用程序生命周期(而不仅仅是活动生命周期)中,只有一个与数据库建立连接的实例.
我还阅读了一些关于ContentProvider的文章,但我不确定这是一个更好的方法.
所以,这是我的Singleton类的主要逻辑(onCreate
并onUpgrade
删除):
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) 我使用以下代码将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项目.它由Gradle"管理"并不断与Jenkins一起构建.我想用Sonar分析我的代码质量.
声纳分析是使用sonarRunner
Gradle任务完成的.问题是,声纳仍然告诉我有"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) 我目前正在开展一个截止日期很短的项目,所以我没有太多时间去理解一切.另外,我不是 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()
方法时.尝试访问resultsForCS
C#似乎是不可能的.
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)