Android Handler NullPointerException

时间:2012-05-24 15:15:19

标签: android android-listview nullpointerexception handler android-ui

  1. Activity创建了一个新的Thread
  2. run()方法通过输入流获取对象(vector)。
  3. 现在,我想在名为Vector的{​​{1}}上显示此ListView的内容。
  4. 这就是全部...但它不起作用并抛出direc
  5. 代码:

    Exception

    以下是Logcat的意思:

    public class FileExplorerActivity extends Activity implements Runnable
    {
        public static final String TAG="ricky";
        Vector<String> dirs = new Vector<String>();
        ListView direc;
        static ArrayAdapter<String> arrayAdapter;
        Handler handler;
    
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.fileexplorer);
            direc = (ListView) findViewById(R.id.directoriesss);
            handler = new Handler();
            Thread thread = new Thread(this);
            thread.start();
        }
    
        public FileExplorerActivity() 
        {
    
        }
    
        public void run()
        {
            Log.d(TAG, "FileExplorer: Thread started");
            try
            {
                Log.d(TAG, "FileExplorer: reading data");
                dirs = (Vector<String>) ConnectionThread.din.readObject();
                Log.d(TAG, "FileExplorer: read data");
                arrayAdapter = new ArrayAdapter<String>(this, 
                                         android.R.layout.activity_list_item,
                                         android.R.id.text2 , dirs);            
                Log.d(TAG, "FileExplorer: ArrayAdapter created");
    
                handler.post( new Runnable() {
                    public void run()
                    {
                        Log.d(TAG, "FileExplorer: In handler Thread");
                        direc.setAdapter(arrayAdapter);
                        Log.d(TAG, "FileExplorer: Updated UI");
                    }
                });
    
                Log.d(TAG, "FileExplorer: Directory set");
            }catch (Exception e) {
                Log.d(TAG, "FileExplorerActivity: Exception:"+e.getMessage());
            }
        }
    }
    

2 个答案:

答案 0 :(得分:1)

请注意NullPointerException出现的行:

android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:353)


这是因为android.R.layout.activity_list_item不包含android.R.id.text2

您可以改为使用android.R.id.text1或将行布局替换为simple_list_item_2

我建议您首先创建自己的行布局以避免这些情况。

答案 1 :(得分:0)

移动此

arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.activity_list_item,
        android.R.id.text2 , dirs);

在run()方法中,以便它在UI线程上运行。您不应该在UI线程之外创建ArrayAdapter。