将InputStream传递给另一个类并获得NullPointerException

时间:2013-06-19 18:31:52

标签: java android

我正在尝试在我的活动中创建一个InputStream。它创建很好,但我试图将创建的InputStream传递给我实际上想要使用InputStream的类。在我的活动上的onClick方法内创建的InputStream。第二个我尝试将InputStream对象传递给我的“工作类”中的方法我得到一个NullPointerException。我不想在我的活动中做这项工作。如何传递InputStream或甚至是AssetManager对象来使用它。我的“工人阶级”没有扩展或实施任何东西。应该吗?

    public class MainActivity extends ListActivity {
        private DbManagement mdbManager;
        private TestProcessor tp;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_lookup);
            mdbManager = new DbManagement(this);
            mdbManager.open();
            fillData();
            Button testingCsv =(Button)findViewById(R.id.btnTestCsv);
            testingCsv.setOnClickListener(ChokeSlam);
            testPopulate_Tests();

        }

        private OnClickListener ChokeSlam = new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                AssetManager aM = getAssets();
                InputStream ipNext = null;
                InputStreamReader iprNext = null;
                try{                
                    //ipNext = aM.open("Book1.csv");
                    //CSVReader reader = new CSVReader(new InputStreamReader(ipNext));
                    //iprNext = new InputStreamReader(ipNext);
                    //tp.ProcessInboundStream(ipNext);
                    tp.ProcessInboundStream(aM,"Book1.csv");
                    ipNext.close();
                    //tp.ProcessInboundStream(new InputStream(ipNext));
                }
                catch(Exception ex){
                  System.out.println(ex.toString());
                }
            }

        };



    public class TestProcessor {
        private DbManagement mdbManager;
        private final Context mctx;

        public TestProcessor(Context ctx) {
            // TODO Auto-generated constructor stub
            this.mctx = ctx;
        }
        public void ProcessInboundStream(AssetManager aM,String fileName){


            InputStream ipNext = null;
            try{                
                ipNext = aM.open(fileName);
                CSVReader reader = new CSVReader(new InputStreamReader(ipNext));        
                ipNext.close();
                //tp.ProcessInboundStream(new InputStream(ipNext));
            }
            catch(Exception ex){
              System.out.println(ex.toString());
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

你还没有发布太多信息。在你的行中:

ipNext = aM.open(fileName);

您确定此时AssetManager am不是null吗?它似乎只是在远程onClick方法中初始化。当你实例化TestProcess时,我无法分辨。

如果做不到,请检查:

ipNext = aM.open(fileName);

并确保ipNext不是null。可能找不到该文件,因此返回null流。

无论如何,崩溃日志会告诉您NPE正在发生的行。从那里你可以很快自己解决这个问题。

答案 1 :(得分:0)

谢谢你们。我想通了,但你们可以通过代码告诉我,我从来没有正确实例化tp对象。我所做的只是声明对象。我将这行代码添加到onCreate方法中。

    tp = new TestProcessor(this);