2014-01-25 18 views
0

我正在嘗試製作一個Android應用程序,該應用程序可以搜索手機文件,並在用戶輸入實時時將其列在搜索框下。請幫助糾正代碼,得到空指針異常。所有的資源都已到位。如何更正此文件搜索應用程序?獲取nullpointerexception錯誤

import java.io.File; 
import java.io.FilenameFilter; 
import java.util.ArrayList; 
import android.os.Bundle; 
import android.app.ListActivity; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.util.Log; 
import android.view.Menu; 
import android.view.ViewGroup; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.ArrayAdapter; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.ProgressBar; 

public class MainActivity extends ListActivity implements TextWatcher { 
    File[] myfiles; 
    FilenameFilter filter; 
    TextWatcher watcher; 
    String query; 
    static File file; 
    EditText eT; 
    ListView list; 
    ArrayList<String> myList; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ProgressBar progressBar = new ProgressBar(this); 
     progressBar.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 
       LayoutParams.WRAP_CONTENT)); 

     progressBar.setIndeterminate(true); 
     list.setEmptyView(progressBar); 

     ViewGroup root = (ViewGroup) findViewById(android.R.id.content); 
     root.addView(progressBar); 

     list = (ListView) findViewById(android.R.id.list); 

     File file = new File("Environment.getExternalStorageDirectory().getPath()"); 
     myfiles = file.listFiles(filter); 

     Log.d("tag", "files passed"); 
     eT = (EditText) findViewById(R.id.editText1); 
     } 








    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 

     return true; 
    } 








    @Override 
    public void afterTextChanged(Editable s) { 
     // TODO Auto-generated method stub 
     query = ((EditText) s).getText().toString(); 

       filter = new FilenameFilter() { 


        @Override 
        public boolean accept(File dir, String filename) { 
         String lcaseName = filename.toLowerCase(); 
         if(lcaseName.contains(query)) { 
          return true; 
         } 
         else { 
         return false; 
         } 
        } 

       }; 
       list.setAdapter(new ArrayAdapter<String>(this, 
           android.R.layout.simple_list_item_1, myList)); 
       myList = new ArrayList<String>(); 

       for(int i =0; i < myfiles.length; i++) { 
        myList.add(myfiles[i].getName()); 

       } 





    } 


    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 
     // TODO Auto-generated method stub 

    } 








    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     // TODO Auto-generated method stub 






    } 

} 
+3

1.請參閱logcat中的異常堆棧跟蹤。 2.在代碼中找到相應的行。 3.找出可能的原因,解決並測試問題是否消失。 4.如果沒有幫助,請提供問題中步驟1和2的信息,以便其他人可以提供幫助。 – laalto

+0

請新來android,我不知道如何正確使用logcat。任何幫助將不勝感激。謝謝 – user3234870

回答

2
list.setEmptyView(progressBar); 

// ... 

list = (ListView) findViewById(android.R.id.list); 

您使用list它的初始化之前。

調試過程,從問題的評論被拉:

  1. 見logcat的異常堆棧跟蹤。
  2. 在您的代碼中找到相應的行。
  3. 找出可能的原因。通過修復代碼並再次測試來測試您的理論。

當發佈你的代碼中的崩潰問題,總是包括來自步驟1和2

+0

謝謝它刪除了錯誤。但現在我有一個新問題:它不顯示任何結果。請如何編輯代碼?猜測是完全錯誤 – user3234870

1

變量list未初始化信息。但解決此問題後,您將再次獲得NullPointerException,因爲您正在使用的filter也爲空。

myfiles = file.listFiles(filter); 
+0

謝謝,但過濾器不爲空。我可能在文本更改回調方法中不恰當地定義了它。任何關於如何使它真正起作用的建議 – user3234870

相關問題