Thank you in advance to everyone who takes a look at this question, especially to those who try to answer! This website has been of great help to me!
I am currently experiencing the following error in my Android 4.2.2 app. Below is the logcat:
09-09 01:14:27.008: D/dalvikvm(9008): newInstance failed: p0 i0 [0 a1
09-09 01:14:27.008: D/AndroidRuntime(9008): Shutting down VM
09-09 01:14:27.008: W/dalvikvm(9008): threadid=1: thread exiting with uncaught exception (group=0x41173ac8)
09-09 01:14:27.018: E/AndroidRuntime(9008): FATAL EXCEPTION: main
09-09 01:14:27.018: E/AndroidRuntime(9008): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.pocketbotanist/com.pocketbotanist.HomeScreen}: java.lang.InstantiationException: can't instantiate class com.pocketbotanist.HomeScreen
09-09 01:14:27.018: E/AndroidRuntime(9008): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2173)
09-09 01:14:27.018: E/AndroidRuntime(9008): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2297)
09-09 01:14:27.018: E/AndroidRuntime(9008): at android.app.ActivityThread.access$700(ActivityThread.java:152)
09-09 01:14:27.018: E/AndroidRuntime(9008): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1282)
09-09 01:14:27.018: E/AndroidRuntime(9008): at android.os.Handler.dispatchMessage(Handler.java:99)
09-09 01:14:27.018: E/AndroidRuntime(9008): at android.os.Looper.loop(Looper.java:137)
09-09 01:14:27.018: E/AndroidRuntime(9008): at android.app.ActivityThread.main(ActivityThread.java:5328)
09-09 01:14:27.018: E/AndroidRuntime(9008): at java.lang.reflect.Method.invokeNative(Native Method)
09-09 01:14:27.018: E/AndroidRuntime(9008): at java.lang.reflect.Method.invoke(Method.java:511)
09-09 01:14:27.018: E/AndroidRuntime(9008): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
09-09 01:14:27.018: E/AndroidRuntime(9008): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
09-09 01:14:27.018: E/AndroidRuntime(9008): at dalvik.system.NativeStart.main(Native Method)
09-09 01:14:27.018: E/AndroidRuntime(9008): Caused by: java.lang.InstantiationException: can't instantiate class com.pocketbotanist.HomeScreen
09-09 01:14:27.018: E/AndroidRuntime(9008): at java.lang.Class.newInstanceImpl(Native Method)
09-09 01:14:27.018: E/AndroidRuntime(9008): at java.lang.Class.newInstance(Class.java:1319)
09-09 01:14:27.018: E/AndroidRuntime(9008): at android.app.Instrumentation.newActivity(Instrumentation.java:1071)
09-09 01:14:27.018: E/AndroidRuntime(9008): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2164)
09-09 01:14:27.018: E/AndroidRuntime(9008): ... 11 more
I have tried a project clean, tried to Android Private Library fix I saw somewhere else, and checked my package names (unless I'm missing something, which I might be!). Here's homescreen.java:
package com.pocketbotanist;
import java.io.File;
import android.app.ListActivity;
import android.app.LoaderManager;
import android.content.Intent;
import android.content.Loader;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import com.pocketbotanist.contentprovider.MyEntryContentProvider;
import com.pocketbotanist.database.EntryTable;
public abstract class HomeScreen extends ListActivity implements LoaderManager.LoaderCallbacks<Cursor> {
private static final int DELETE_ID = Menu.FIRST + 1;
// private Cursor cursor;
private SimpleCursorAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_screen);
this.getListView().setDividerHeight(2);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
//Initial folder creation code
File appDirectory = new File(Environment.getExternalStorageDirectory().toString()+"/Pocket Botanist/");
if (!appDirectory.exists()){
appDirectory.mkdir();
}
//Drop down list code
Spinner spinner = (Spinner) findViewById(R.id.action_spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.action_list, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
fillData();
//View listItem=(View)((Menu) this.getListView()).getItem(0);
registerForContextMenu(getListView());
if (adapter.isEmpty())
System.out.println("IT'S EMPTY");
String[] projection = { EntryTable.COLUMN_CUSTOMID };
long info = adapter.getItemId(0);
Uri uri = Uri.parse(MyEntryContentProvider.CONTENT_URI + "/"
+ info);
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
cursor.moveToFirst();
System.out.println((cursor.getString(cursor
.getColumnIndexOrThrow(EntryTable.COLUMN_CUSTOMID))));
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case DELETE_ID:
String[] projection = { EntryTable.COLUMN_PHOTOS };
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
.getMenuInfo();
Uri uri = Uri.parse(MyEntryContentProvider.CONTENT_URI + "/"
+ info.id);
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
cursor.moveToFirst();
File temp = new File(cursor.getString(cursor
.getColumnIndexOrThrow(EntryTable.COLUMN_PHOTOS)));
if(temp.exists()){
File[] files = temp.listFiles();
for(int i = 0; i < files.length; i++){
files[i].delete();
}
temp.delete();
}
getContentResolver().delete(uri, null, null);
fillData();
return true;
}
return super.onContextItemSelected(item);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_home_screen, menu);
//SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.menu_settings:
settCall();
return true;
case R.id.menu_map:
map1_3();
return true;
case R.id.menu_edit:
entryScreen("New Entry");
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void entryScreen(String t){
Intent intent = new Intent(this, EntryScreen.class);
intent.putExtra("passer", t);
startActivity(intent);
}
public void settCall(){
Intent sett = new Intent(this,SettingsActivity.class);
startActivity(sett);
}
public void map1_3(){
Intent map13 = new Intent(this,Entrymap_1_3.class);
startActivity(map13);
}
// Opens the second activity if an entry is clicked
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Intent i = new Intent(this, EntryScreen.class);
Uri itemUri = Uri.parse(MyEntryContentProvider.CONTENT_URI + "/" + id);
i.putExtra(MyEntryContentProvider.CONTENT_ITEM_TYPE, itemUri);
startActivity(i);
}
//@Override
//When we create the loader we're going to get the projection for the ID, customID, species name, and time columns
//(insures that these exist within the database)
//then we create our cursor loader which will be responsible for loading data from the database
//using the projection and our content provider
/* public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
String[] projection = { EntryTable.COLUMN_ID, EntryTable.COLUMN_CUSTOMID, EntryTable.COLUMN_SPECIES, EntryTable.COLUMN_TIME, EntryTable.COLUMN_PHOTOS, EntryTable.COLUMN_PHOTO };
CursorLoader cursor = new CursorLoader(this,
MyEntryContentProvider.CONTENT_URI, projection, null, null, null);
if (cursor != null) {
((Cursor) cursor).moveToFirst();
}
return cursor;
} */
private void fillData() {
// Fields from the database (projection)
String[] from = new String[] { EntryTable.COLUMN_CUSTOMID, EntryTable.COLUMN_SPECIES , EntryTable.COLUMN_TIME, EntryTable.COLUMN_PHOTO};
// Fields on the UI to which we map
int[] to = new int[] { R.id.customidlabel, R.id.namelabel, R.id.timelabel, R.id.imageView };
getLoaderManager().initLoader(1, null, this); //changed to 1
adapter = new SimpleCursorAdapter(this, R.layout.list_row, null, from, to, 0);
setListAdapter(adapter);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(0, DELETE_ID, 0, R.string.menu_delete);
}
@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor data) {
adapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
adapter.swapCursor(null);
}
}
I understand the problem might be here, so here is my AndroidManifest.xml file as well:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.pocketbotanist"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
<permission
android:name="com.pocketbotanist.permission.MAPS_RECEIVE"
android:protectionLevel="signature"/>
<uses-permission android:name="com.pocketbotanist.permission.MAPS_RECEIVE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:configChanges="keyboardHidden|orientation" >
<activity
android:name="com.pocketbotanist.HomeScreen"
android:label="@string/main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.pocketbotanist.EntryScreen"
android:label="@string/title_activity_entry_screen"
android:windowSoftInputMode="stateHidden"
>
</activity>
<activity
android:name="com.pocketbotanist.SettingsActivity"
android:label="@string/title_activity_settings" >
</activity>
<activity
android:name="com.pocketbotanist.ManualLocationActivity"
android:label="@string/title_activity_manual_location" >
</activity>
<activity
android:name="com.pocketbotanist.Entrymap_1_3"
android:label="@string/title_activity_entrymap_1_3" >
</activity>
<activity
android:name="com.pocketbotanist.Location_2_3"
android:label="@string/title_location_2_3" >
</activity>
<activity
android:name="com.pocketbotanist.Mapfragmentpreview"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/title_activity_mapfragmentpreview"
android:theme="@style/FullscreenTheme" >
</activity>
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="(removing key for security reasons)" />
<uses-library
android:name="com.google.android.maps"
android:required="true" />
<provider
android:name="com.pocketbotanist.contentprovider.MyEntryContentProvider"
android:authorities="com.pocketbotanist.contentprovider"
android:exported="false">
</provider>
</application>
</manifest>
Does anyone have any ideas/suggestions? Thanks again in advance!
Abstract classes are by definition not instantiable.
change
to
Your class is an abstract classes.
Abstract classes are by definition not instantiable.
private class are not instantiable:
Replace below code, public abstract class HomeScreen extends ListActivity implements LoaderManager.LoaderCallbacks
to:
public class HomeScreen extends ListActivity implements LoaderManager.LoaderCallbacks
It will work.