Unable to open the drop down details in spinner.
What I have tried:
<pre>package edu.orangecoastcollege.cs273.occcoursefinder;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class CourseSearchActivity extends AppCompatActivity {
private DBHelper db;
private List<Course> allCoursesList;
private List<Offering> allOfferingsList;
private List<Offering> filteredOfferingsList;
private EditText courseTitleEditText;
private Spinner ok;
private ListView offeringsListView;
private OfferingListAdapter offeringListAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_course_search);
deleteDatabase(DBHelper.DATABASE_NAME);
db = new DBHelper(this);
db.importCoursesFromCSV("courses.csv");
db.importOfferingsFromCSV("offerings.csv");
allOfferingsList = db.getAllOfferings();
filteredOfferingsList = new ArrayList<>(allOfferingsList);
allCoursesList = db.getAllCourses();
courseTitleEditText = (EditText) findViewById(R.id.courseTitleEditText);
courseTitleEditText.addTextChangedListener(courseTitleTextWatcher);
ok = (Spinner) findViewById(R.id.ok);
offeringListAdapter = new OfferingListAdapter(this, R.layout.offering_list_item, filteredOfferingsList);
ok.setAdapter(offeringListAdapter);
ArrayAdapter<String> instructorSpinnerAdapter = new ArrayAdapter<String>
(this, android.R.layout.simple_spinner_item, getAllInstructorNames());
}
private String[] getAllInstructorNames(){
String[] instructorNames = new String[allCoursesList.size() + 1];
instructorNames[0] = "[Select Course]";
for(int i = 1; i < instructorNames.length; i++){
instructorNames[i] = allCoursesList.get(i - 1).getTitle();
}
return instructorNames;
}
public TextWatcher courseTitleTextWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
String input = charSequence.toString().toLowerCase();
if (input.equals("")) {
} else {
String name = ok.getSelectedItem().toString();
offeringListAdapter.clear();
for (Offering offering : allOfferingsList) {
Course course = offering.getCourse();
if (course.getTitle().toLowerCase().contains(input))
offeringListAdapter.add(offering);
}
}
}
@Override
public void afterTextChanged(Editable editable) {
}
};
public AdapterView.OnItemSelectedListener instructorSpinnerListener = new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
String selectedInstructorName = adapterView.getItemAtPosition(i).toString();
if(selectedInstructorName.equals("[Select Instructor]")){
offeringListAdapter.clear();
for (Offering offering : allOfferingsList)
offeringListAdapter.add(offering);
}
else{
offeringListAdapter.clear();
}
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
adapterView.setSelection(0);
Toast.makeText(getApplicationContext(), "Why?", Toast.LENGTH_SHORT).show();
}
};
public void reset(View view){
courseTitleEditText.setText("");
ok.setSelection(0);
}
}
package edu.orangecoastcollege.cs273.occcoursefinder;
public class Course {
private int mId;
private String mAlpha;
private String mNumber;
private String mTitle;
public Course(int id, String alpha, String number, String title) {
mId = id;
mAlpha = alpha;
mNumber = number;
mTitle = title;
}
public Course(String alpha, String number, String title) {
this(-1, alpha, number, title);
}
public int getId() {
return mId;
}
public String getAlpha() {
return mAlpha;
}
public void setAlpha(String alpha) {
mAlpha = alpha;
}
public String getNumber() {
return mNumber;
}
public String getFullName() {
return mAlpha + " " + mNumber;
}
public void setNumber(String number) {
mNumber = number;
}
public String getTitle() {
return mTitle;
}
public void setTitle(String title) {
mTitle = title;
}
@Override
public String toString() {
return "Course{" +
"Id=" + mId +
", Alpha='" + mAlpha + '\'' +
", Number='" + mNumber + '\'' +
", Title='" + mTitle + '\'' +
'}';
}
}
package edu.orangecoastcollege.cs273.occcoursefinder;
import android.content.ContentValues;
import android.content.Context;
import android.content.res.AssetManager;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
class DBHelper extends SQLiteOpenHelper {
private Context mContext;
static final String DATABASE_NAME = "OCC";
private static final int DATABASE_VERSION = 1;
public static final String COURSES_TABLE = "Courses";
public static final String COURSES_KEY_FIELD_ID = "_id";
public static final String FIELD_ALPHA = "alpha";
public static final String FIELD_NUMBER = "number";
public static final String FIELD_TITLE = "title";
private static final String OFFERINGS_TABLE = "Offerings";
private static final String OFFERINGS_KEY_FIELD_ID = "crn";
private static final String FIELD_SEMESTER_CODE = "semester_code";
public static final String FIELD_COURSE_ID = "course_id";
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
mContext = context;
}
@Override
public void onCreate(SQLiteDatabase database) {
String createQuery = "CREATE TABLE " + COURSES_TABLE + "("
+ COURSES_KEY_FIELD_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ FIELD_ALPHA + " TEXT, "
+ FIELD_NUMBER + " TEXT, "
+ FIELD_TITLE + " TEXT" + ")";
database.execSQL(createQuery);
createQuery = "CREATE TABLE " + OFFERINGS_TABLE + "("
+ OFFERINGS_KEY_FIELD_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ FIELD_SEMESTER_CODE + " INTEGER, "
+ FIELD_COURSE_ID + " INTEGER, "
+ "FOREIGN KEY(" + FIELD_COURSE_ID + ") REFERENCES "
+ COURSES_TABLE + "(" + COURSES_KEY_FIELD_ID + ")" +
")";
database.execSQL(createQuery);
}
@Override
public void onUpgrade(SQLiteDatabase database,
int oldVersion,
int newVersion) {
database.execSQL("DROP TABLE IF EXISTS " + COURSES_TABLE);
database.execSQL("DROP TABLE IF EXISTS " + OFFERINGS_TABLE);
onCreate(database);
}
public void addCourse(Course course) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(FIELD_ALPHA, course.getAlpha());
values.put(FIELD_NUMBER, course.getNumber());
values.put(FIELD_TITLE, course.getTitle());
db.insert(COURSES_TABLE, null, values);
db.close();
}
public ArrayList<Course> getAllCourses() {
ArrayList<Course> coursesList = new ArrayList<>();
SQLiteDatabase database = this.getReadableDatabase();
Cursor cursor = database.query(
COURSES_TABLE,
new String[]{COURSES_KEY_FIELD_ID, FIELD_ALPHA, FIELD_NUMBER, FIELD_TITLE},
null,
null,
null, null, null, null);
if (cursor.moveToFirst()) {
do {
Course course =
new Course(cursor.getInt(0),
cursor.getString(1),
cursor.getString(2),
cursor.getString(3));
coursesList.add(course);
} while (cursor.moveToNext());
}
return coursesList;
}
public void deleteCourse(Course course) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(COURSES_TABLE, COURSES_KEY_FIELD_ID + " = ?",
new String[]{String.valueOf(course.getId())});
db.close();
}
public void deleteAllCourses() {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(COURSES_TABLE, null, null);
db.close();
}
public void updateCourse(Course course) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(FIELD_ALPHA, course.getAlpha());
values.put(FIELD_NUMBER, course.getNumber());
values.put(FIELD_TITLE, course.getTitle());
db.update(COURSES_TABLE, values, COURSES_KEY_FIELD_ID + " = ?",
new String[]{String.valueOf(course.getId())});
db.close();
}
public Course getCourse(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(
COURSES_TABLE,
new String[]{COURSES_KEY_FIELD_ID, FIELD_ALPHA, FIELD_NUMBER, FIELD_TITLE},
COURSES_KEY_FIELD_ID + "=?",
new String[]{String.valueOf(id)},
null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
Course course = new Course(
cursor.getInt(0),
cursor.getString(1),
cursor.getString(2),
cursor.getString(3));
db.close();
return course;
}
public void addOffering(int crn, int semesterCode, int courseId) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(OFFERINGS_KEY_FIELD_ID, crn);
values.put(FIELD_SEMESTER_CODE, semesterCode);
values.put(FIELD_COURSE_ID, courseId);
db.insert(OFFERINGS_TABLE, null, values);
db.close();
}
public ArrayList<Offering> getAllOfferings() {
ArrayList<Offering> offeringsList = new ArrayList<>();
SQLiteDatabase database = this.getReadableDatabase();
Cursor cursor = database.query(
OFFERINGS_TABLE,
new String[]{OFFERINGS_KEY_FIELD_ID, FIELD_SEMESTER_CODE, FIELD_COURSE_ID},
null,
null,
null, null, null, null);
if (cursor.moveToFirst()) {
do {
Course course = getCourse(cursor.getInt(2));
Offering offering = new Offering(cursor.getInt(0),
cursor.getInt(1), course);
offeringsList.add(offering);
} while (cursor.moveToNext());
}
return offeringsList;
}
public void deleteOffering(Offering offering) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(OFFERINGS_TABLE, OFFERINGS_KEY_FIELD_ID + " = ?",
new String[]{String.valueOf(offering.getCRN())});
db.close();
}
public void deleteAllOfferings() {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(OFFERINGS_TABLE, null, null);
db.close();
}
public void updateOffering(Offering offering) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(FIELD_SEMESTER_CODE, offering.getSemesterCode());
values.put(FIELD_COURSE_ID, offering.getCourse().getId());
db.update(OFFERINGS_TABLE, values, OFFERINGS_KEY_FIELD_ID + " = ?",
new String[]{String.valueOf(offering.getCRN())});
db.close();
}
public Offering getOffering(int crn) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(
OFFERINGS_TABLE,
new String[]{OFFERINGS_KEY_FIELD_ID, FIELD_SEMESTER_CODE, FIELD_COURSE_ID},
OFFERINGS_KEY_FIELD_ID + "=?",
new String[]{String.valueOf(crn)},
null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
Course course = getCourse(cursor.getInt(2));
Offering offering = new Offering(cursor.getInt(0),
cursor.getInt(1), course);
db.close();
return offering;
}
public Cursor getAllLabelsAsCursor() {
String[] columns = new String[]{"rowid AS _id, *"};
return this.getWritableDatabase().query(COURSES_TABLE,columns,null,null,null,null,null);
}
public boolean importCoursesFromCSV(String csvFileName) {
AssetManager manager = mContext.getAssets();
InputStream inStream;
try {
inStream = manager.open(csvFileName);
} catch (IOException e) {
e.printStackTrace();
return false;
}
BufferedReader buffer = new BufferedReader(new InputStreamReader(inStream));
String line;
try {
while ((line = buffer.readLine()) != null) {
String[] fields = line.split(",");
if (fields.length != 4) {
Log.d("OCC Course Finder", "Skipping Bad CSV Row: " + Arrays.toString(fields));
continue;
}
int id = Integer.parseInt(fields[0].trim());
String alpha = fields[1].trim();
String number = fields[2].trim();
String title = fields[3].trim();
addCourse(new Course(id, alpha, number, title));
}
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
public boolean importOfferingsFromCSV(String csvFileName) {
AssetManager am = mContext.getAssets();
InputStream inStream = null;
try {
inStream = am.open(csvFileName);
} catch (IOException e) {
e.printStackTrace();
}
BufferedReader buffer = new BufferedReader(new InputStreamReader(inStream));
String line;
try {
while ((line = buffer.readLine()) != null) {
String[] fields = line.split(",");
if (fields.length != 4) {
Log.d("OCC Course Finder", "Skipping Bad CSV Row: " + Arrays.toString(fields));
continue;
}
int crn = Integer.parseInt(fields[0].trim());
int semesterCode = Integer.parseInt(fields[1].trim());
int courseId = Integer.parseInt(fields[2].trim());
addOffering(crn, semesterCode, courseId);
}
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
}
package edu.orangecoastcollege.cs273.occcoursefinder;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Spinner;
import java.util.ArrayList;
import java.util.List;
public class OfferingListAdapter extends ArrayAdapter<Offering> {
private Context mContext;
private List<Offering> mOfferingsList = new ArrayList<>();
private int mResourceId;
public OfferingListAdapter(Context c, int rId, List<Offering> offerings) {
super(c, rId, offerings);
mContext = c;
mResourceId = rId;
mOfferingsList = offerings;
}
@Override
public View getView(int pos, View convertView, ViewGroup parent)
{
final Offering selectedOffering = mOfferingsList.get(pos);
final Course selectedCourse = selectedOffering.getCourse();
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(mResourceId, null);
TextView offeringListFullNameTextView = (TextView) view.findViewById(R.id.offeringListFullNameTextView);
Spinner spinner=(Spinner) convertView.findViewById(R.id.ok);
offeringListFullNameTextView.setText( selectedCourse.getTitle());
String[] colors={"Red","Green","Blue"};
return view;
}
}
package edu.orangecoastcollege.cs273.occcoursefinder;
public class Offering {
private int mCRN;
private int mSemesterCode;
private Course mCourse;
public Offering(int CRN, int semesterCode, Course course) {
mCRN = CRN;
mSemesterCode = semesterCode;
mCourse = course;
}
public Offering(int semesterCode, Course course) {
mSemesterCode = semesterCode;
mCourse = course;
}
public int getCRN() {
return mCRN;
}
public int getSemesterCode() {
return mSemesterCode;
}
public String getSemesterName() {
switch (mSemesterCode)
{
case 201731:
return "Fall 2017";
default:
return "";
}
}
public void setSemesterCode(int semesterCode) {
mSemesterCode = semesterCode;
}
public Course getCourse() {
return mCourse;
}
public void setCourse(Course course) {
mCourse = course;
}
@Override
public String toString() {
return "Offering{" +
"CRN=" + mCRN +
", SemesterCode=" + mSemesterCode +
", Course=" + mCourse +
'}';
}
}
04-11 14:52:59.657 8011-8011/edu.orangecoastcollege.cs273.occcoursefinder E/AndroidRuntime: FATAL EXCEPTION: main
Process: edu.orangecoastcollege.cs273.occcoursefinder, PID: 8011
java.lang.IllegalStateException: Could not find method viewOfferingDetails(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.widget.LinearLayout with id 'offeringListLinearLayout'
at android.view.View$DeclaredOnClickListener.resolveMethod(View.java:4757)
at android.view.View$DeclaredOnClickListener.onClick(View.java:4716)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)