获取android中testcase的活动上下文
我试图获取调用我的接收者的活动的上下文。我想在我的测试用例类中创建上下文。我这样写我的测试用例获取android中testcase的活动上下文,android,junit,broadcastreceiver,Android,Junit,Broadcastreceiver,我试图获取调用我的接收者的活动的上下文。我想在我的测试用例类中创建上下文。我这样写我的测试用例 public class TestDataupload extends AndroidTestCase { public static DataUpload dat; public static SyncUpload syn; protected void setUp() throws Exception { try { super.setUp(); sy
public class TestDataupload extends AndroidTestCase {
public static DataUpload dat;
public static SyncUpload syn;
protected void setUp() throws Exception {
try {
super.setUp();
syn = new SyncUpload();
dat = new DataUpload(syn.returncon());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void testupload() throws Exception {
long lst = dat.insert("Down", "com.android", "2012-02-18 00:00:00",
"0000-00-00 00:00:00", "0");
Assert.assertEquals(2, lst);
}
我的接受者班在这里
public class SyncUpload extends Activity {
DataUpload du;
List<String> records;
InputStream is;
ArrayList<NameValuePair> nameValuePairs;
String result;
public static final String TAG = "test";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if (du == null)
du = new DataUpload(getApplicationContext());
insertAppList();
getAppList();
}
private void insertAppList() {
if (du == null)
du = new DataUpload(this);
List<PackageInfo> packs = this.getPackageManager()
.getInstalledPackages(0);
String[] appName = new String[packs.size()];
String[] packName = new String[packs.size()];
for (int i = 0; i < packs.size(); i++) {
PackageInfo p = packs.get(i);
appName[i] = p.applicationInfo.loadLabel(this.getPackageManager())
.toString();
packName[i] = p.packageName;
du.insertApp(appName, packName);
}
private void getAppList() {
if (du == null)
du = new DataUpload(this);
if(records == null)
records= du.select();
if(records.size() > 0){
//for (String record : records)
// Log.d(TAG, "RECORDS" + record);
Log.d(TAG, "RECORDS" + records.size());
}
@Override
public void finish() {
super.finish();
du.close();
}
public static Context CTX;
public void getctx(Context context){
CTX = context;
}
public Context returncontext(){
return CTX;
}}
公共类同步上载扩展活动{
数据上传;
列出记录;
输入流为;
ArrayList名称值对;
字符串结果;
公共静态最终字符串TAG=“test”;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
如果(du==null)
du=新数据上传(getApplicationContext());
插入应用程序();
getAppList();
}
私有void插入应用程序(){
如果(du==null)
du=新数据上传(本);
List packs=this.getPackageManager()
.getInstalledPackages(0);
String[]appName=新字符串[packs.size()];
String[]packName=新字符串[packs.size()];
对于(int i=0;i0){
//for(字符串记录:记录)
//日志d(标签“记录”+记录);
Log.d(标记“RECORDS”+RECORDS.size());
}
@凌驾
公共空间整理(){
super.finish();
du.close();
}
公共静态上下文;
公共void getctx(上下文){
CTX=上下文;
}
公共上下文returncontext(){
返回CTX;
}}
SyncUpload是我的activity类,我在其中创建了returncontext()方法,该方法返回activity的上下文。但是我得到了一个空指针异常。错误日志为
java.lang.NullPointerException
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase
(SQLiteOpenHelper.java:118)
at com.android.sync.DataUpload.<init>(DataUpload.java:45)
at com.android.sync.test.TestActivity.setUp(TestActivity.java:27)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)
java.lang.NullPointerException
位于android.database.sqlite.SQLiteOpenHelper.getWritableDatabase
(SQLiteOpenHelper.java:118)
位于com.android.sync.DataUpload(DataUpload.java:45)
位于com.android.sync.test.TestActivity.setUp(TestActivity.java:27)
位于android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
位于android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
位于android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
位于android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)
我应该如何摆脱这个错误。有没有其他技术可以解决这个问题。提前谢谢
公共类数据上传{
public static final String TAG = "test";
private static final String DATABASE_NAME = "deviceintelligenceapplist.db";
private static final int DATABASE_VERSION = 1;
private static final String TABLE_NAME = "app_list";
private Context context;
private SQLiteDatabase db;
private SQLiteStatement insertStmt;
private OpenHelper openHelper;
private static final String INSERT = "insert into "
+ TABLE_NAME
+ "(app_name, package_name, added_date_time, removed_date_time, flag)"
+ "values (?,?,?,?,?)";
private String recordList;
public DataUpload(Context context) {
Log.d(TAG, "INSIDE APPLISTDATA CONSTRUCTOR");
this.context = context;
openHelper = new OpenHelper(this.context);
this.db = openHelper.getWritableDatabase();
this.insertStmt = this.db.compileStatement(INSERT);
Log.d(TAG, "END OF APPLISTDATA CONSTRUCTOR");
}
public long insert(String app_name, String package_name,
String added_date_time, String removed_date_time, String flag) {
Log.d(TAG, "START OF INSERT FUNCTION IN DATAUPLOAD");
this.insertStmt.bindString(1, app_name);
this.insertStmt.bindString(2, package_name);
this.insertStmt.bindString(3, added_date_time);
this.insertStmt.bindString(4, removed_date_time);
this.insertStmt.bindString(5, flag);
Log.d(TAG, "END OF INSERT FUNCTION IN DATAUPLOAD");
long value = this.insertStmt.executeInsert();
Log.d(TAG, "Database total inserts:---" + value);
return value;
}
public long insertApp(String[] app_name, String[] package_name) {
Log.d(TAG, "START OF INSERT FUNCTION IN DATAUPLOAD");
long value = 0;
String flag = "0";
String remove_date_time = "0000-00-00 00:00:00.000";
SimpleDateFormat sdfDateTime = new SimpleDateFormat(
"yy-MM-dd HH:mm:ss", Locale.US);
String added_date_time = sdfDateTime.format(System.currentTimeMillis());
for (int i = 0; i < package_name.length; i++) {
this.insertStmt.bindString(1, app_name[i]);
this.insertStmt.bindString(2, package_name[i]);
this.insertStmt.bindString(3, added_date_time);
this.insertStmt.bindString(4, remove_date_time);
this.insertStmt.bindString(5, flag);
value = this.insertStmt.executeInsert();
Log.d(TAG, "insertapp: " + value);
}
Log.d(TAG, "END OF INSERT FUNCTION IN DATAUPLOAD");
return value;
}
public void deleteAll() {
Log.d(TAG, "START OF DELETEALL FUNCTION IN DATAUPLOAD");
db.execSQL("DELETE FROM " + TABLE_NAME
+ " WHERE removed_date != 0000-00-00 00:00:00.000");
Log.d(TAG, "END OF DELETEALL FUNCTION IN APPLISTDATA");
}
public List<String> selectAll() {
Log.d(TAG, "START OF SELECTALL FUNCTION IN DATAUPLOAD");
List<String> list = new ArrayList<String>();
Cursor cursor = this.db.query(TABLE_NAME, null, "flag=?",
new String[] { "0" }, null, null, null, null);
if (cursor.moveToFirst()) {
do {
recordList = cursor.getString(0) + " /; " + cursor.getString(1)
+ " /; " + cursor.getString(2) + " /; "
+ cursor.getString(3) + " /; " + cursor.getString(4)
+ "\n";
list.add(recordList);
} while (cursor.moveToNext());
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
Log.d(TAG, "APPLISTDATA: " + list.toString());
Log.d(TAG, "END OF SELECTALL FUNCTION IN DATAUPLOAD");
return list;
}
public List<String> select() {
Log.d(TAG, "START OF SELECTALL FUNCTION IN DATAUPLOAD");
List<String> list = new ArrayList<String>();
Cursor cursor = this.db.query(TABLE_NAME, null, null, null, null, null,
null);
if (cursor.moveToFirst()) {
do {
recordList = cursor.getString(0) + " /; " + cursor.getString(1)
+ " /; " + cursor.getString(2) + " /; "
+ cursor.getString(3) + " /; " + cursor.getString(4)
+ "\n";
list.add(recordList);
} while (cursor.moveToNext());
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
Log.d(TAG, "END OF SELECTALL FUNCTION IN DATAUPLOAD");
return list;
}
public void close() {
Log.d(TAG, "START OF CLOSE FUNCTION IN DATAUPLOAD");
// OpenHelper openHelper = new OpenHelper(this.context);
openHelper.close();
Log.d(TAG, "END OF CLOSE FUNCTION IN DATAUPLOAD");
}
public void update() {
Log.d(TAG, "START OF LAST RECORD UPDATE IN DATAUPLOAD");
String selectflag = "0";
long count = DatabaseUtils.queryNumEntries(db, TABLE_NAME);
if (count > 0) {
Cursor cursor = this.db.query(TABLE_NAME, new String[] { "flag" },
"flag= ?", new String[] { selectflag }, null, null, null,
null);
while (cursor.moveToNext()) {
Log.d(TAG, "flag: while " + cursor.getString(0).trim());
if (cursor.getString(0).trim().equals("0")) {
Log.d(TAG, "flag: if ");
ContentValues args = new ContentValues();
args.put("flag", "1");
db.update(TABLE_NAME, args, "flag = 0", null);
}
}
Log.d(TAG, "SELECTIN UPDATE DB: " + select().toString());
Log.d(TAG, "END OF LAST RECORD UPDATE IN DATAUPLOAD");
}
}
private static class OpenHelper extends SQLiteOpenHelper {
OpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(TAG, "START OF OPENHELPER ONCREATE IN DATAUPLOAD");
db.execSQL("CREATE TABLE "
+ TABLE_NAME
+ "(app_name VARCHAR(40),"
+ "package_name VARCHAR(40), added_date_time VARCHAR(20), removed_date_time VARCHAR(20), "
+ " flag VARCHAR(1))");
Log.d(TAG, "START OF OPENHELPER ONCREATE IN DATAUPLOAD");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.d(TAG, "INSIDE UPGRADE IN OPENHELPER");
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
@Override
public synchronized void close() {
Log.d(TAG, "INSIDE CLOSE IN OPENHELPER IN DATAUPLOAD");
super.close();
}
}
公共静态最终字符串TAG=“test”;
私有静态最终字符串数据库\u NAME=“deviceintelligenceapplist.db”;
私有静态最终int数据库_VERSION=1;
私有静态最终字符串表\u NAME=“app\u list”;
私人语境;
专用数据库数据库;
私有SQLiteStatement insertStmt;
私人OpenHelper OpenHelper;
私有静态最终字符串INSERT=“插入到”
+表名称
+(应用程序名称、软件包名称、添加日期时间、删除日期时间、标志)
+“值(?,?,?,?)”;
私有字符串记录列表;
公共数据上载(上下文){
Log.d(标签,“内部APPLISTDATA构造函数”);
this.context=上下文;
openHelper=新的openHelper(this.context);
this.db=openHelper.getWritableDatabase();
this.insertStmt=this.db.compileStatement(INSERT);
Log.d(标记“APPLISTDATA构造函数的结尾”);
}
公共长插入(字符串应用程序名称、字符串包名称、,
添加字符串\u日期\u时间,删除字符串\u日期\u时间,字符串标志){
Log.d(标记,“数据上传中插入函数的开始”);
this.insertStmt.bindString(1,应用程序名称);
this.insertStmt.bindString(2,包名称);
this.insertStmt.bindString(3,添加了日期和时间);
this.insertStmt.bindString(4,删除日期时间);
this.insertStmt.bindString(5,标志);
Log.d(标记“数据上传中插入函数的结束”);
long value=this.insertStmt.executeInsert();
Log.d(标记“数据库总插入量:--”+值);
返回值;
}
公共长插入应用程序(字符串[]应用程序名称,字符串[]包名称){
Log.d(标记,“数据上传中插入函数的开始”);
长值=0;
字符串标志=“0”;
字符串删除日期时间=“0000-00-00:00:00.000”;
SimpleDateFormat sdfDateTime=新SimpleDateFormat(
“yy-MM-dd HH:MM:ss”,Locale.US);
字符串添加了_date_time=sdfDateTime.format(System.currentTimeMillis());
for(int i=0;i