java.lang.String无法强制转换为android.database.Cursor

时间:2013-03-24 13:16:40

标签: android logcat

我正在尝试单击listview中的值以转到新的xml布局我的问题是这个错误出来了:

从我的logcat

我只能理解这个

03-24 11:37:20.990: E/AndroidRuntime(793):  at me.mojica.caloriewatch.Search$1.onItemClick(Search.java:261)

这一个

    Cursor cursor = (Cursor) parent.getItemAtPosition(position);

这是完整的logcat。

03-24 11:37:20.990: E/AndroidRuntime(793): FATAL EXCEPTION: main
03-24 11:37:20.990: E/AndroidRuntime(793): java.lang.ClassCastException: java.lang.String cannot be cast to android.database.Cursor
03-24 11:37:20.990: E/AndroidRuntime(793):  at me.mojica.caloriewatch.Search$1.onItemClick(Search.java:261)
03-24 11:37:20.990: E/AndroidRuntime(793):  at android.widget.AdapterView.performItemClick(AdapterView.java:298)
03-24 11:37:20.990: E/AndroidRuntime(793):  at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
03-24 11:37:20.990: E/AndroidRuntime(793):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:2749)
03-24 11:37:20.990: E/AndroidRuntime(793):  at android.widget.AbsListView$1.run(AbsListView.java:3423)
03-24 11:37:20.990: E/AndroidRuntime(793):  at android.os.Handler.handleCallback(Handler.java:725)
03-24 11:37:20.990: E/AndroidRuntime(793):  at android.os.Handler.dispatchMessage(Handler.java:92)
03-24 11:37:20.990: E/AndroidRuntime(793):  at android.os.Looper.loop(Looper.java:137)
03-24 11:37:20.990: E/AndroidRuntime(793):  at android.app.ActivityThread.main(ActivityThread.java:5039)
03-24 11:37:20.990: E/AndroidRuntime(793):  at java.lang.reflect.Method.invokeNative(Native Method)
03-24 11:37:20.990: E/AndroidRuntime(793):  at java.lang.reflect.Method.invoke(Method.java:511)
03-24 11:37:20.990: E/AndroidRuntime(793):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-24 11:37:20.990: E/AndroidRuntime(793):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-24 11:37:20.990: E/AndroidRuntime(793):  at dalvik.system.NativeStart.main(Native Method)

和我的search.java

package me.mojica.caloriewatch;


import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AlphabetIndexer;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SectionIndexer;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ArrayAdapter;
import android.text.Editable;
import android.text.TextWatcher;
import android.content.DialogInterface.OnClickListener;

public class Search extends Activity implements OnClickListener {



   int arlene = 0;
   int textlength = 0;

   ListView listContent1, transact;
   EditText search, food, calories;
   Button FSearch;
   TextView result;

   SimpleCursorAdapter cursorAdapter, cursorAdap;
   Cursor cursor;
   private String[] listview_array;
   private ArrayList<String> array_sort = new ArrayList<String>();
   private SQLiteAdapter mySQLiteAdapter;

   /*   Called when the activity is first created.  */


   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.search);
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);



  listContent1 = (ListView) findViewById(R.id.lFoodlist1);
  listContent1.setFastScrollEnabled(true); //must be enabled
  // transact = (ListView)findViewById(R.id.transact);
  search = (EditText) findViewById(R.id.eFsearch);
  food = (EditText) findViewById(R.id.editText1);
  calories = (EditText) findViewById(R.id.editText2);
  FSearch = (Button) findViewById(R.id.bFsearch);
  result = (TextView) findViewById(R.id.textView3);

  /*
     Create/Open a SQLite database
     and fill with dummy content
     and close it
    */
  mySQLiteAdapter = new SQLiteAdapter(this);
  mySQLiteAdapter.openToWrite();
  mySQLiteAdapter.deleteAll();

  mySQLiteAdapter.insert("Adobong Baboy (1 bowl)", "339");
  mySQLiteAdapter.insert("Adobong Kangkong ( 1 bowl)", "84");
  mySQLiteAdapter.insert("Adobong Manok (1 bowl) ", "624");
  mySQLiteAdapter.insert("Adobong Pusit (1 bowl)", "121");
  mySQLiteAdapter.insert("Arroz Caldo (1 bowl)", "500");
  mySQLiteAdapter.insert("Chicken Afritada (1 bowl)", "323");
  mySQLiteAdapter.insert("Chicken Asado (1 bowl)", "205");
  mySQLiteAdapter.insert("Chicken Empanada (1 bowl)", "150");
  mySQLiteAdapter.insert("Chicken Tinola (1 bowl)", "267");
  mySQLiteAdapter.insert("Dinuguan (1 bowl)", "255");
  mySQLiteAdapter.insert("Fried Bangus (1 pc)", "162");
  mySQLiteAdapter.insert("Ginataang Kalabasa (1 bowl)", "225");
  mySQLiteAdapter.insert("Ginataang Langka (1 bowl)", "167");
  mySQLiteAdapter.insert("Ginataang Pinakbet (1 bowl)", "155");
  mySQLiteAdapter.insert("Igado (1 bowl)", "297");
  mySQLiteAdapter.insert("Kare Kare (1 bowl)", "129");
  mySQLiteAdapter.insert("Laing (1 bowl)", "202");
  mySQLiteAdapter.insert("Lechon Kawali (1 bowl)", "245");
  mySQLiteAdapter.insert("Pakbet (1 bowl)", "233");
  mySQLiteAdapter.insert("Paksiw na Isda (1 bowl)", "73");
  mySQLiteAdapter.insert("Paksiw na Pata (1 bowl)", "342");
  mySQLiteAdapter.insert("Pinakbet (1 bowl)", "110");
  mySQLiteAdapter.insert("Pork Afritada (1 bowl)", "402");
  mySQLiteAdapter.insert("Pork Asado (1 bowl)", "533");
  mySQLiteAdapter.insert("Pork Barbaque on Stick (1 stick)", "111");
  mySQLiteAdapter.insert("Pork Embutido (1 bowl)", "350");
  mySQLiteAdapter.insert("Pork Mechado (1 bowl)", "157");
  mySQLiteAdapter.insert("Pork Nilaga (1 bowl)", "181");
  mySQLiteAdapter.insert("Pork Pochero (1 bowl)", "798");
  mySQLiteAdapter.insert("Pork Sinigang (1 bowl)", "290");
  mySQLiteAdapter.insert("Relyenong Bangus (1 bowl)", "390");
  mySQLiteAdapter.insert("Salmon Sinigang (1 bowl)", "190");
  mySQLiteAdapter.insert("Sisig (1 bowl)", "293");
  mySQLiteAdapter.insert("Tilapia (1 pc)", "100");
  mySQLiteAdapter.insert("Tinolang Manok (1 bowl)", "843");
  mySQLiteAdapter.insert("Tortang Talong (1 pc)", "291");
  mySQLiteAdapter.insert("Balut (1 egg)", "188");
  mySQLiteAdapter.insert("Beefsteak (1 bowl)", "210");
  mySQLiteAdapter.insert("Bibingka", "100");
  mySQLiteAdapter.insert("Biko (1 slice)", "100");
  mySQLiteAdapter.insert("Buko Pie (1 slice)", "145");
  mySQLiteAdapter.insert("Cassava Cake (1 slice)", "100");
  mySQLiteAdapter.insert("Chicsilog (1 meal)", "284");
  mySQLiteAdapter.insert("Coorned Beef (1 meal)", "267");
  mySQLiteAdapter.insert("Danggit (1 pc)","98");
  mySQLiteAdapter.insert("Ice Cream", "157");
  mySQLiteAdapter.insert("Embotido", "187");
  mySQLiteAdapter.insert("Ensaymada", "410");
  mySQLiteAdapter.insert("Espasol", "50");
  mySQLiteAdapter.insert("Fishball (1 pc)", "9");
  mySQLiteAdapter.insert("Fruit Salad (1 bowl)", "211");
  mySQLiteAdapter.insert("Galapong (1 slice)", "100");
  mySQLiteAdapter.insert("Ginataan (1 bowl)", "167");
  mySQLiteAdapter.insert("Halaya", "70");
  mySQLiteAdapter.insert("Halo halo (1 cup)", "80");
  mySQLiteAdapter.insert("Hotdog (1 pc)", "183");
  mySQLiteAdapter.insert("Kutsinta", "100");
  mySQLiteAdapter.insert("Leche Flan", "228");
  mySQLiteAdapter.insert("Lomi", "222");
  mySQLiteAdapter.insert("Longganisa (1 pc)", "170");
  mySQLiteAdapter.insert("Lumpiang Shanghai (1 pc)", "169");
  mySQLiteAdapter.insert("Palabok", "305");
  mySQLiteAdapter.insert("Palitaw", "100");
  mySQLiteAdapter.insert("Pancit", "416");
  mySQLiteAdapter.insert("Pansit Palabok", "305");
  mySQLiteAdapter.insert("Pastillas (1 pc)", "76");
  mySQLiteAdapter.insert("Porksilog (1 meal)", "555");
  mySQLiteAdapter.insert("Pulvoron (1 pc)", "40");
  mySQLiteAdapter.insert("Puto (1 pc)", "112");
  mySQLiteAdapter.insert("Puto Bumbong (1 pc)", "50");
  mySQLiteAdapter.insert("Puto Pao (1 bun)", "120");
  mySQLiteAdapter.insert("Qwek qwek (1 pc)", "14");
  mySQLiteAdapter.insert("Saging na Saba", "122");
  mySQLiteAdapter.insert("Sapin sapin (1 slice)", "100" );
  mySQLiteAdapter.insert("Scrambled Egg", "100");
  mySQLiteAdapter.insert("Sinangag (1 cup)", "300");
  mySQLiteAdapter.insert("Siopao", "240");
  mySQLiteAdapter.insert("Suman (1 pc )", "31");
  mySQLiteAdapter.insert("Taho (1 cup)", "180");
  mySQLiteAdapter.insert("Tapsilog (1 meal)", "364");
  mySQLiteAdapter.insert("Tikoy (1 slice)", "100");
  mySQLiteAdapter.insert("Tuyo (1 pc)", "57");
  mySQLiteAdapter.insert("Yema (1 pc)", "20");

  mySQLiteAdapter.insert("Apple", "80");
  mySQLiteAdapter.insert("Apricots", "17");
  mySQLiteAdapter.insert("Avocado", "30");
  mySQLiteAdapter.insert("Banana", "105");
  mySQLiteAdapter.insert("Blueberries", "82");
  mySQLiteAdapter.insert("Cherry", "4");
  mySQLiteAdapter.insert("Coconut", "159");
  mySQLiteAdapter.insert("Eggplant", "132");
  mySQLiteAdapter.insert("Grape Fruit", "62");
  mySQLiteAdapter.insert("Guava", "61");
  mySQLiteAdapter.insert("Kiwi Fruit", "25");
  mySQLiteAdapter.insert("Lemon", "24");
  mySQLiteAdapter.insert("Limes", "20");
  mySQLiteAdapter.insert("Lychee", "4");
  mySQLiteAdapter.insert("Mango", "107");
  mySQLiteAdapter.insert("Melon", "188");
  mySQLiteAdapter.insert("Orange", "62");
  mySQLiteAdapter.insert("Peach", "38");
  mySQLiteAdapter.insert("Pineapple (1 slice)", "42");
  mySQLiteAdapter.insert("Pomelo (per section)", "72");
  mySQLiteAdapter.insert("Rambutan", "7");
  mySQLiteAdapter.insert("Raspberries", "82");
  mySQLiteAdapter.insert("Strawberry", "8");
  mySQLiteAdapter.insert("Tomato", "15");
  mySQLiteAdapter.insert("Watermelon (per slice)", "46");


  mySQLiteAdapter.close();

  /* 
     Open the same SQLite database
     and read all it's content.
    */
  mySQLiteAdapter = new SQLiteAdapter(this);
  mySQLiteAdapter.openToRead();
  listview_array = mySQLiteAdapter.qall();

  listContent1.setAdapter(new ArrayAdapter<String>(this,
          android.R.layout.simple_list_item_1, listview_array));
  listContent1.setOnItemClickListener(listContentOnItemClickListener); 
  result.setOnClickListener(new View.OnClickListener(){

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub

        // Toast.makeText(Search.this, Toast.LENGTH_LONG).show();      
    }

  });

  search.addTextChangedListener(new TextWatcher()
  {
  public void afterTextChanged(Editable s)
  {
                                                                  // Abstract Method of TextWatcher Interface.
  }
  public void beforeTextChanged(CharSequence s,
  int start, int count, int after)
  {
  // Abstract Method of TextWatcher Interface.
  }
  public void onTextChanged(CharSequence s,
  int start, int before, int count)
  {
  textlength = search.getText().length();
  array_sort.clear();
  for (int i = 0; i < listview_array.length; i++)
  {
  if (textlength <= listview_array[i].length())
  {
  if(search.getText().toString().equalsIgnoreCase(
  (String)
  listview_array[i].subSequence(0,
  textlength)))
  {
      array_sort.add(listview_array[i]);
      }
   }
}
  listContent1.setAdapter(new ArrayAdapter<String>
  (Search.this,
  android.R.layout.simple_list_item_1, array_sort));
  }

  });

  Cursor cursor = mySQLiteAdapter.queueAll();
  startManagingCursor(cursor);

  String[] from = new String[] { SQLiteAdapter.KEY_FOODNAME, SQLiteAdapter.KEY_CALORIES };
  int[] to = new int[] { R.id.tv1, R.id.tv2 };

  SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this, R.layout.row, cursor, from,
        to);

      listContent1.setAdapter(cursorAdapter);
      listContent1.setOnItemClickListener(listContentOnItemClickListener);
   }


   private ListView.OnItemClickListener listContentOnItemClickListener = new     ListView.OnItemClickListener() {
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
         Cursor cursor = (Cursor) parent.getItemAtPosition(position);

     String item_content1 = cursor.getString(cursor.getColumnIndex(SQLiteAdapter.KEY_FOODNAME));
     String item_content2 = cursor.getString(cursor.getColumnIndex(SQLiteAdapter.KEY_CALORIES));

     arlene = arlene + Integer.parseInt(item_content2);
     String item = String.valueOf(" Food Name: " + item_content1) + "\n" + " Calories: "
           + item_content2;

     Toast.makeText(Search.this, item, Toast.LENGTH_LONG).show();

     food.setText(item_content1);
     calories.setText(String.valueOf(arlene));
     result.setText(String.valueOf(arlene));

     // define a key to store value into sharedpreferences
     String key = food.getText().toString() + ":" + calories.getText().toString();

     // here i assume that the combinasion food:calories are unique
     SavePreferences(key, key); 

     /*
        mySQLiteAdapter.openToWrite();
        String data1 = food.getText().toString();
        String data2 = calories.getText().toString();
        mySQLiteAdapter.insertFood(data1, data2);
        updateList();
       */
     SavePreferences("computed", result.getText().toString());
  }
   };

   protected void SavePreferences(String key, String value) {
  // TODO Auto-generated method stub
  SharedPreferences sharedPreferences = getSharedPreferences("MY_SHARED_PREF", MODE_PRIVATE);
  SharedPreferences.Editor editor = sharedPreferences.edit();
  editor.putString(key, value);
  editor.commit();

   }

       protected void LoadPreferences() {
      // // TODO Auto-generated method stub
       SharedPreferences sharedPreferences = getSharedPreferences("MY_SHARED_PREF", MODE_PRIVATE);
      String strSavedMem1 = sharedPreferences.getString("computed", "");
      // String strSavedMem2 = sharedPreferences.getString("calories", "");
      //
       result.setText(strSavedMem1);
       }
      // calories.setText(strSavedMem2);
      // }

class MyCursorAdapter extends SimpleCursorAdapter implements SectionIndexer{

    AlphabetIndexer alphaIndexer;

            public MyCursorAdapter(Context context, int layout, Cursor c,
                            String[] from, int[] to) {
                    super(context, layout, c, from, to);

   alphaIndexer=new AlphabetIndexer(c, cursor.getColumnIndex(SQLiteAdapter.KEY_FOODNAME), "        ABCDEFGHIJKLMNOPQRSTUVWXYZ");

            }
   // you have just to instanciate the indexer class like this

   //cursor,index of the sorted column,a string representing the alphabet (pay attention on the        blank char at the beginning of the sequence)

   @Override

   public int getPositionForSection(int section) {                

           return alphaIndexer.getPositionForSection(section); //use the indexer

   }



   @Override

   public int getSectionForPosition(int position) {                       

    return alphaIndexer.getSectionForPosition(position); //use the indexer

   }



   @Override

   public Object[] getSections() {

           return alphaIndexer.getSections(); //use the indexer

   }

            }

      protected void onDestroy() {

         // TODO Auto-generated method stub

         super.onDestroy();

         mySQLiteAdapter.close();

      }

      private void updateList() {
         // TODO Auto-generated method stub
         cursor.requery();
      }

   @Override
   public void onClick(DialogInterface arg0, int arg1) {
       // TODO Auto-generated method stub

   }

   }

1 个答案:

答案 0 :(得分:0)

问题是onTextChanged: 你应该使用/拥有:cursorAdapter.getFilter().filter(s.toString());

我建议您查询用于在搜索edittext中键入的字符串,然后使用listview获取项目位置以在onItemClick Cursor cursor = (Cursor) listContent1.getItemAtPosition(position);中获取光标