Android实例化错误,即无法实例化活动
我试图将解析后的数据保存到数据库中,但有一个实例化异常。我正在使用Parcelable将解析后的arraylist从一个活动传递到另一个活动。我需要将这些arraylist从一个活动传递到另一个活动,并将其存储在sqlite中Android实例化错误,即无法实例化活动,android,android-sqlite,Android,Android Sqlite,我试图将解析后的数据保存到数据库中,但有一个实例化异常。我正在使用Parcelable将解析后的arraylist从一个活动传递到另一个活动。我需要将这些arraylist从一个活动传递到另一个活动,并将其存储在sqlite中 public class AndroidXMLParsingActivity extends ListActivity implements Parcelable{ //private ScheduleClient scheduleClient; public Calen
public class AndroidXMLParsingActivity extends ListActivity implements Parcelable{
//private ScheduleClient scheduleClient;
public Calendar cal;
//TextView desciption1;
TextView name1;
private GetData mGetData;
// All static variables
static final String URL = "http address";
// XML node keys
static final String KEY_ITEM = "group_header"; // parent node
static String KEY_NAME = "name";
static String KEY_ID = "group_day";
static String KEY_COST = "day_sun_mrg";
static String KEY_DESC = "day_sun_evn";
static final String KEY_COST1 = "day_mon_mrg";
static final String KEY_DESC1 = "day_mon_evn";
static final String KEY_COST2 = "day_tue_mrg";
static final String KEY_DESC2 = "day_tue_evn";
static final String KEY_COST3 = "day_wed_mrg";
static final String KEY_DESC3 = "day_wed_evn";
static final String KEY_COST4 = "day_thu_mrg";
static final String KEY_DESC4 = "day_thu_evn";
static final String KEY_COST5 = "day_fri_mrg";
static final String KEY_DESC5 = "day_fri_evn";
static final String KEY_COST6 = "day_sat_mrg";
static final String KEY_DESC6 = "day_sat_evn";
ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL); // getting XML
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_ITEM);
// looping through all item nodes <item>
for (int i = 0; i < nl.getLength(); i++) {
Element e = (Element) nl.item(i);
// adding each child node to HashMap key => value
map.put(KEY_ID, parser.getValue(e, KEY_ID));
map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
map.put(KEY_COST,parser.getValue(e, KEY_COST));
map.put(KEY_DESC, parser.getValue(e, KEY_DESC));
map.put(KEY_COST1,parser.getValue(e, KEY_COST1));
map.put(KEY_DESC1, parser.getValue(e,KEY_DESC1));
map.put(KEY_COST2,parser.getValue(e, KEY_COST2));
map.put(KEY_DESC2, parser.getValue(e,KEY_DESC2));
map.put(KEY_COST3,parser.getValue(e, KEY_COST3));
map.put(KEY_DESC3, parser.getValue(e,KEY_DESC3));
map.put(KEY_COST4,parser.getValue(e, KEY_COST4));
map.put(KEY_DESC4, parser.getValue(e,KEY_DESC4));
map.put(KEY_COST5,parser.getValue(e, KEY_COST5));
map.put(KEY_DESC5, parser.getValue(e,KEY_DESC5));
map.put(KEY_COST6,parser.getValue(e, KEY_COST6));
map.put(KEY_DESC6, parser.getValue(e,KEY_DESC6));
// adding HashList to ArrayList
menuItems.add(map);
//Passing Data to Store Page
mGetData.addLoad(menuItems);
//putStringArrayListExtra(menuItems, ArrayList<String> menuItems);
}
// Adding menuItems to ListView
ListAdapter adapter = new SimpleAdapter(this, menuItems,
R.layout.list_item,
new String[] { KEY_NAME, KEY_DESC, KEY_COST }, new int[] {
R.id.name, R.id.desciption, R.id.cost});
setListAdapter(adapter);
// selecting single ListView item
ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// getting values from selected ListItem
String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
String cost = ((TextView) view.findViewById(R.id.cost)).getText().toString();
String description = ((TextView) view.findViewById(R.id.desciption)).getText().toString();
// Starting new intent
Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class);
in.putExtra(KEY_NAME, name);
in.putExtra(KEY_COST, cost);
in.putExtra(KEY_DESC, description);
startActivity(in);
}
});
}
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
dest.writeString(KEY_NAME);
dest.writeString(KEY_COST);
dest.writeString(KEY_DESC);
}
public AndroidXMLParsingActivity(Parcel source){
KEY_NAME=source.readString();
KEY_COST=source.readString();
KEY_DESC=source.readString();
source.readArrayList(getClassLoader());
}
我认为您尚未在AndroidManifest.xml中注册您的活动 请在AndroidManifest.xml中注册您的活动
无论何时创建新活动,都必须在AndroidManifest.xml中注册该活动。您正在为AndroidXMLParsingActivity创建自己的构造函数
我认为你不应该重写构造函数。也不要让你的活动可序列化。创建一个自定义的可序列化类,该类包含包含要传递的数据的字段。然后通过这门课,而不是你的活动我想这可能会帮助一些新手解决问题,所以我发布了我的答案。在这里,我解析了该值,并使用AsyncTask直接从同一个函数将其传递给sqlite。代码如下:
public class LoadScheduleAsyncTask extends AsyncTask<String, String, String> {
DBAdapter dba;
Boolean isInternetPresent = false;
// Connection Detector Class
ConnectionDetector cd;
private ProgressDialog pDialog;
// Alert Dialog Manager
AlertDialogManager alert = new AlertDialogManager();
// XML Parsing URL
static final String URL = "url address";
// XML node keys
static final String KEY_ITEM = "group_header"; // Parent Node
static final String KEY_ROWID = "_id";
static final String KEY_NAME = "name";
static final String KEY_SUNM = "day_sun_mrg";
static final String KEY_SUNE = "day_sun_evn";
static final String KEY_MONM = "day_mon_mrg";
static final String KEY_MONE = "day_mon_evn";
static final String KEY_TUEM = "day_tue_mrg";
static final String KEY_TUEE = "day_tue_evn";
static final String KEY_WEDM = "day_wed_mrg";
static final String KEY_WEDE = "day_wed_evn";
static final String KEY_THUM = "day_thu_mrg";
static final String KEY_THUE = "day_thu_evn";
static final String KEY_FRIM = "day_fri_mrg";
static final String KEY_FRIE = "day_fri_evn";
static final String KEY_SATM = "day_sat_mrg";
static final String KEY_SATE = "day_sat_evn";
public static ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
// Creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
Context context;
public LoadScheduleAsyncTask(Context ctxt){
dba=new DBAdapter(ctxt);
context=ctxt;
}
/**
* Before starting background thread Show Progress Dialog
**/
@SuppressLint("NewApi")
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(context);
pDialog.setMessage("Updating Data ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
/**
* getting Schedule XML
**/
protected String doInBackground(String... args) {
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL); // getting XML
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_ITEM);
// looping through all item nodes <item>
for (int i = 0; i < nl.getLength(); i++) {
Element e = (Element) nl.item(i);
// adding each child node to HashMap key => value
map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
map.put(KEY_SUNM, parser.getValue(e, KEY_SUNM));
map.put(KEY_SUNE, parser.getValue(e, KEY_SUNE));
map.put(KEY_MONM, parser.getValue(e, KEY_MONM));
map.put(KEY_MONE, parser.getValue(e, KEY_MONE));
map.put(KEY_TUEM, parser.getValue(e, KEY_TUEM));
map.put(KEY_TUEE, parser.getValue(e, KEY_TUEE));
map.put(KEY_WEDM, parser.getValue(e, KEY_WEDM));
map.put(KEY_WEDE, parser.getValue(e, KEY_WEDE));
map.put(KEY_THUM, parser.getValue(e, KEY_THUM));
map.put(KEY_THUE, parser.getValue(e, KEY_THUE));
map.put(KEY_FRIM, parser.getValue(e, KEY_FRIM));
map.put(KEY_FRIE, parser.getValue(e, KEY_FRIE));
map.put(KEY_SATM, parser.getValue(e, KEY_SATM));
map.put(KEY_SATE, parser.getValue(e, KEY_SATE));
// adding HashList to ArrayList
menuItems.add(map);
/**
* Updating parsed JSON data into ListView
**/
String group_id = map.get(KEY_NAME);
String sunm = map.get(KEY_SUNM);
String sune = map.get(KEY_SUNE);
String monm = map.get(KEY_MONM);
String mone = map.get(KEY_MONE);
String tuem = map.get(KEY_TUEM);
String tuee = map.get(KEY_TUEE);
String wedm = map.get(KEY_WEDM);
String wede = map.get(KEY_WEDE);
String thum = map.get(KEY_THUM);
String thue = map.get(KEY_THUE);
String frim = map.get(KEY_FRIM);
String frie = map.get(KEY_FRIE);
String satm = map.get(KEY_SATM);
String sate = map.get(KEY_SATE);
try {
dba.open();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
dba.insertData(group_id, sunm, sune, monm, mone, tuem, tuee, wedm,
wede, thum, thue, frim, frie, satm, sate);
dba.close();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
**/
protected void onPostExecute(String file_url) {
// dismiss the dialog after getting all schedules
pDialog.dismiss();
}
}
此答案基于与我的问题不同的方法。请参见您的“创建加载”表,您可能需要注意空格。例如,在KEY_SUN之后,您应该放置STRING,而不是STRING,请查看空格。好的,没有错误,我的意思是原始代码中没有空格。谢谢你的建议anyway@Aprian在CREATE_LOADS_表中正确地告诉您需要字符串周围的空间。顺便说一句,这不可能是你生活中唯一的错误code@guido啊,好的,我知道还有其他错误,我没有找到,这就是为什么我张贴it@Aprian我已经这样做了,但即使是同样的错误仍然存在,请你提供一些链接或代码或教程给我做这件事。这对于我创建另一个类来说是一个头疼的问题。您可以引用任何可序列化的类。
09-18 13:11:03.362: E/AndroidRuntime(471): FATAL EXCEPTION: main
09-18 13:11:03.362: E/AndroidRuntime(471): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mokshya.multinodeparse/com.mokshya.multinodeparse.parse.AndroidXMLParsingActivity}: java.lang.InstantiationException:
09-18 13:11:03.362: E/AndroidRuntime(471): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
09-18 13:11:03.362: E/AndroidRuntime(471): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
09-18 13:11:03.362: E/AndroidRuntime(471): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
09-18 13:11:03.362: E/AndroidRuntime(471): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
09-18 13:11:03.362: E/AndroidRuntime(471): at android.os.Handler.dispatchMessage(Handler.java:99)
09-18 13:11:03.362: E/AndroidRuntime(471): at android.os.Looper.loop(Looper.java:123)
09-18 13:11:03.362: E/AndroidRuntime(471): at android.app.ActivityThread.main(ActivityThread.java:4627)
09-18 13:11:03.362: E/AndroidRuntime(471): at java.lang.reflect.Method.invokeNative(Native Method)
09-18 13:11:03.362: E/AndroidRuntime(471): at java.lang.reflect.Method.invoke(Method.java:521)
09-18 13:11:03.362: E/AndroidRuntime(471): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-18 13:11:03.362: E/AndroidRuntime(471): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-18 13:11:03.362: E/AndroidRuntime(471): at dalvik.system.NativeStart.main(Native Method)
09-18 13:11:03.362: E/AndroidRuntime(471): Caused by: java.lang.InstantiationException: com.mokshya.multinodeparse.parse.AndroidXMLParsingActivity
09-18 13:11:03.362: E/AndroidRuntime(471): at java.lang.Class.newInstanceImpl(Native Method)
09-18 13:11:03.362: E/AndroidRuntime(471): at java.lang.Class.newInstance(Class.java:1429)
09-18 13:11:03.362: E/AndroidRuntime(471): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
09-18 13:11:03.362: E/AndroidRuntime(471): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
09-18 13:11:03.362: E/AndroidRuntime(471): ... 11 more
com.mokshya.multinodeparse.parse.AndroidXMLParsingActivity
public class LoadScheduleAsyncTask extends AsyncTask<String, String, String> {
DBAdapter dba;
Boolean isInternetPresent = false;
// Connection Detector Class
ConnectionDetector cd;
private ProgressDialog pDialog;
// Alert Dialog Manager
AlertDialogManager alert = new AlertDialogManager();
// XML Parsing URL
static final String URL = "url address";
// XML node keys
static final String KEY_ITEM = "group_header"; // Parent Node
static final String KEY_ROWID = "_id";
static final String KEY_NAME = "name";
static final String KEY_SUNM = "day_sun_mrg";
static final String KEY_SUNE = "day_sun_evn";
static final String KEY_MONM = "day_mon_mrg";
static final String KEY_MONE = "day_mon_evn";
static final String KEY_TUEM = "day_tue_mrg";
static final String KEY_TUEE = "day_tue_evn";
static final String KEY_WEDM = "day_wed_mrg";
static final String KEY_WEDE = "day_wed_evn";
static final String KEY_THUM = "day_thu_mrg";
static final String KEY_THUE = "day_thu_evn";
static final String KEY_FRIM = "day_fri_mrg";
static final String KEY_FRIE = "day_fri_evn";
static final String KEY_SATM = "day_sat_mrg";
static final String KEY_SATE = "day_sat_evn";
public static ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
// Creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
Context context;
public LoadScheduleAsyncTask(Context ctxt){
dba=new DBAdapter(ctxt);
context=ctxt;
}
/**
* Before starting background thread Show Progress Dialog
**/
@SuppressLint("NewApi")
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(context);
pDialog.setMessage("Updating Data ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
/**
* getting Schedule XML
**/
protected String doInBackground(String... args) {
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL); // getting XML
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_ITEM);
// looping through all item nodes <item>
for (int i = 0; i < nl.getLength(); i++) {
Element e = (Element) nl.item(i);
// adding each child node to HashMap key => value
map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
map.put(KEY_SUNM, parser.getValue(e, KEY_SUNM));
map.put(KEY_SUNE, parser.getValue(e, KEY_SUNE));
map.put(KEY_MONM, parser.getValue(e, KEY_MONM));
map.put(KEY_MONE, parser.getValue(e, KEY_MONE));
map.put(KEY_TUEM, parser.getValue(e, KEY_TUEM));
map.put(KEY_TUEE, parser.getValue(e, KEY_TUEE));
map.put(KEY_WEDM, parser.getValue(e, KEY_WEDM));
map.put(KEY_WEDE, parser.getValue(e, KEY_WEDE));
map.put(KEY_THUM, parser.getValue(e, KEY_THUM));
map.put(KEY_THUE, parser.getValue(e, KEY_THUE));
map.put(KEY_FRIM, parser.getValue(e, KEY_FRIM));
map.put(KEY_FRIE, parser.getValue(e, KEY_FRIE));
map.put(KEY_SATM, parser.getValue(e, KEY_SATM));
map.put(KEY_SATE, parser.getValue(e, KEY_SATE));
// adding HashList to ArrayList
menuItems.add(map);
/**
* Updating parsed JSON data into ListView
**/
String group_id = map.get(KEY_NAME);
String sunm = map.get(KEY_SUNM);
String sune = map.get(KEY_SUNE);
String monm = map.get(KEY_MONM);
String mone = map.get(KEY_MONE);
String tuem = map.get(KEY_TUEM);
String tuee = map.get(KEY_TUEE);
String wedm = map.get(KEY_WEDM);
String wede = map.get(KEY_WEDE);
String thum = map.get(KEY_THUM);
String thue = map.get(KEY_THUE);
String frim = map.get(KEY_FRIM);
String frie = map.get(KEY_FRIE);
String satm = map.get(KEY_SATM);
String sate = map.get(KEY_SATE);
try {
dba.open();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
dba.insertData(group_id, sunm, sune, monm, mone, tuem, tuee, wedm,
wede, thum, thue, frim, frie, satm, sate);
dba.close();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
**/
protected void onPostExecute(String file_url) {
// dismiss the dialog after getting all schedules
pDialog.dismiss();
}
}