2016-12-28 54 views
0

嗨我有一个过滤simpleadapterlistview的问题,当我输入编辑文本应用程序不断崩溃请帮助我。过滤器简单适配器列表视图

//这里是我的代码

public class MainActivity extends ListActivity { 

// TextView lbl; 
    DBController controller = new DBController(this); 
    Button btnimport; 
    Button btnexport; 
    Button btnsearch; 
    EditText search; 
    ListView lv; 
    final Context context = this; 
    ListAdapter adapter; 
    ArrayList<HashMap<String, String>> myList; 
    public static final int requestcode = 1; 
    public final static String ID_EXTRA1 = "com.example.ansiuser.uploadfile.MainActivity.Id"; 
    public final static String ID_EXTRA = "com.example.ansiuser.uploadfile.MainActivity.Category"; 
    public final static String ID_EXTRA2 = "com.example.ansiuser.uploadfile.MainActivity.Code"; 
    public final static String ID_EXTRA3 = "com.example.ansiuser.uploadfile.MainActivity.Description"; 
    public final static String ID_EXTRA4 = "com.example.ansiuser.uploadfile.MainActivity.Unit"; 
    public final static String ID_EXTRA5 = "com.example.ansiuser.uploadfile.MainActivity.Quantity"; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     search = (EditText)findViewById(R.id.searchtext); 
     btnimport = (Button) findViewById(R.id.btnupload); 
     btnexport = (Button) findViewById(R.id.btnexport); 
     lv = getListView(); 

     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 

      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       TextView cat; 
       TextView code; 
       TextView desc; 
       TextView unit; 
       TextView quan; 
       Intent intent = new Intent(getApplicationContext(), Main2Activity.class); 



       cat = (TextView) view.findViewById(R.id.txtproductcompany); 
       String gory = cat.getText().toString(); 
       intent.putExtra(ID_EXTRA, gory); 

       code = (TextView) view.findViewById(R.id.txtproductname); 
       String deco = code.getText().toString(); 
       intent.putExtra(ID_EXTRA2, deco); 

       desc = (TextView) view.findViewById(R.id.txtproductprice); 
       String csed = desc.getText().toString(); 
       intent.putExtra(ID_EXTRA3, csed); 

       unit = (TextView) view.findViewById(R.id.txtunit); 
       String noti = unit.getText().toString(); 
       intent.putExtra(ID_EXTRA4, noti); 

       quan = (TextView) view.findViewById(R.id.txtquan); 
       String quanti = quan.getText().toString(); 
       intent.putExtra(ID_EXTRA5, quanti); 

       intent.putExtra(ID_EXTRA1 , String.valueOf(id + 1)); 
       startActivity(intent); 



      } 
     }); 

     btnexport.setOnClickListener(new View.OnClickListener(){ 
      SQLiteDatabase database = controller.getReadableDatabase(); 
      Cursor c = null; 
      @Override 
      public void onClick (View v){ 
       try 
       { 
        c = database.rawQuery("Select * FROM Countsheet" , null); 
        int rowcount = 0; 
        int colcount = 0; 
        File sdCardDir = Environment.getExternalStorageDirectory(); 
        String filename = "/Count2.csv"; 
        File saveFile = new File(sdCardDir,filename); 
        FileWriter fileWriter = new FileWriter(saveFile); 

        BufferedWriter bw = new BufferedWriter(fileWriter); 
        rowcount = c.getCount(); 
        colcount = c.getColumnCount(); 

        if (rowcount > 0) 
         c.moveToFirst(); 
         for (int i = 0 ; i < colcount; i++) 
         { 
          if (i != colcount -1){ 
           bw.write(c.getColumnName(i) + ","); 
          } 
          else { 
           bw.write(c.getColumnName(i)); 
          } 
         } 
        bw.newLine(); 
        for (int i = 0; i < rowcount;i++){ 
         c.moveToPosition(i); 
         for (int j = 0;j < colcount;j++){ 
          if (j != colcount-1) 
          { 
           bw.write(c.getString(j)+ ","); 
          }else 
          { 
           bw.write(c.getString(j)); 
          } 

         } 
         bw.newLine(); 
         bw.flush(); 

//       lbl.setText("Exported Successfully."); 

        } 


       } 
       catch (Exception ex) 
       { 
        if (database.isOpen()){ 
         database.close(); 
//      lbl.setText(ex.getMessage().toString()); 
        } 
       }finally { 

       } 

      } 
     }); 

     btnimport.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Intent fileintent = new Intent(Intent.ACTION_GET_CONTENT); 
       fileintent.setType("gagt/sdf"); 
       try { 
        startActivityForResult(fileintent, requestcode); 
       } catch (ActivityNotFoundException e) { 
//     lbl.setText("No activity can handle picking a file. Showing alternatives."); 
       } 

      } 
     }); 
     myList= controller.getAllProducts(); 
     if (myList.size() != 0) { 
      ListView lv = getListView(); 
      ListAdapter adapter = new SimpleAdapter(MainActivity.this, myList, 
        R.layout.v, new String[]{"Category", "Code", "Description" , "Unit" , "Quantity"}, new int[]{ 
        R.id.txtproductcompany, R.id.txtproductname, R.id.txtproductprice , R.id.txtunit , R.id.txtquan}); 
      setListAdapter(adapter); 
//   lbl.setText(""); 
     } 
     search.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { 
       // When user changed the Text 
       ((SimpleAdapter)MainActivity.this.adapter).getFilter().filter(cs); 
      } 

      @Override 
      public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
              int arg3) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void afterTextChanged(Editable arg0) { 
       // TODO Auto-generated method stub 
      } 
     }); 
    } 

//这里是日志错误

E/AndroidRuntime:致命异常:主要 过程:com.example.ansiuser.uploadfile,PID:14657 java.lang.NullPointerException:试图调用虚拟方法'android.widget.Filter android.widget.SimpleAdapter.getFilter()'对null对象引用 at com.example.ansiuser.uploadfile.MainActivity $ 2.onTextChanged( MainActivity.j ava:111)

回答

0

您的适配器未初始化。使适配器全局并在onCreate中进行初始化。

adapter = new SimpleAdapter(MainActivity.this, yourList, ...) 
+0

您正在创建一个局部变量再次 'ListAdapter适配器=新SimpleAdapter(..)' 改用早先声明的全局变量!更改为 'adapter = new SimpleAdapter(..)' –

+0

SIR谢谢你为你的孩子做了许多工作:) – RaRa