【发布时间】:2014-04-07 07:17:35
【问题描述】:
我有一个MainActivity,其onCreate 是
//called when activity first created
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
searchText = (EditText) findViewById(R.id.searchText);
utils = new Utils(MainActivity.this);
db=(new SQLLiteDbHelper(MainActivity.this,utils.getInt(Key.Db_version))).getReadableDatabase();
request = new WebRequest(this);
status = new AsynGetEmployeeStatus();
}
和sqlitehelper onCreate 和constructor 是
//constructor
public SQLLiteDbHelper(Context context,int dbVersion) {
super(context,DATABASE_NAME, null, dbVersion);
this.context = context;
Log.d("tag","db version is "+DATABASE_VERSION);
crypt = new Cryptography();
utils = new Utils(context);
}
//called when activity first created
@Override
public void onCreate(final SQLiteDatabase db) {
String s;
try {
//new LoadData().execute(db);
new AsynNetworkOperation(context, ServiceUri.AccessMethod.GET, "loading").execute(ServiceUri.SERVICE_URI+"s?d=abc"); //this line throw exception
} catch (Throwable t) {
Toast.makeText(context, t.toString(), Toast.LENGTH_LONG).show();
Log.d("tag",t.toString());
}
}
我的AsynNetworkOperation 班级是
public class AsynNetworkOperation extends AsyncTask<String,Void,Void>{
private Context context = null;
private ProgressDialog dialog = null;
private String title = "";
private WebRequest request = null;
private String accessMethod = "";
private HttpResponse response = null;
AsynResponse delegate = null;
public AsynNetworkOperation(Context context, String method, String dialogTitle)
{
this.context = context;
accessMethod = method;
this.title = dialogTitle;
delegate = (AsynResponse) context;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
dialog = new ProgressDialog(context);
dialog.setMessage(title);
dialog.setCanceledOnTouchOutside(false);
dialog.show();
}
@Override
protected Void doInBackground(String... data) {
// TODO Auto-generated method stub
request = new WebRequest(context);
if(accessMethod.equals(ServiceUri.AccessMethod.GET)){
response = request.makeHttpGetCall(data[0]);
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
dialog.dismiss();
delegate.responseResult(response);
dispose();
}
private void dispose()
{
context = null;
dialog = null;
title = "";
request = null;
accessMethod = "";
delegate = null;
}
}
AsynResponse 是
public interface AsynResponse {
/**
* This will called when AysncTask finished its execution or when onPostExecute called
*
* @param response
*/
public void responseResult(HttpResponse response);
}
我的问题是,每当 sqlitehelper 尝试在其 onCreate 中执行新的 AsynNetworkOperation 时,它都会抛出异常
java.lang.ClassCastException: android.app.MainActivity
谁能帮我找出为什么它抛出异常的问题。
谢谢
【问题讨论】:
-
发布 AsynNetworkOperation
-
对不起..我想我有问题。我忘了实现接口。
-
这行
delegate = (AsynResponse) context;可能导致问题 -
@wqrahd : 如果您遇到任何问题,请尝试在 sqlite helper 类中实现它,然后我们会尽力帮助您
-
@wqrahd :向 AsynNetworkOperation 构造函数添加一个参数为
AsynNetworkOperation(SQLLiteDbHelper sqlitehelper,Context context, String method, String dialogTitle),然后使用delegate =sqlitehelper;并从 SQLLiteDbHelpernew AsynNetworkOperation(this,context, ServiceUri.AccessMethod.GET, "loading").execute(ServiceUri.SERVICE_URI+"s?d=abc");执行任务,如果您在AsynResponse中实现AsynResponse
标签: java android sqlite android-asynctask android-sqlite