1

我正在尝试在我的活动中创建一个 InputStream。它创建得很好,但我试图将创建的 InputStream 传递给我真正想要使用 InputStream 的类。InputStream 在我的活动的 onClick 方法中创建。第二次我尝试将 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());
            }
        }
    }
4

2 回答 2

0

你还没有发布太多内容。在您的行中:

ipNext = aM.open(fileName);

您确定 AssetManageram不在null这一点上吗?它似乎只在远程onClick方法中初始化。我不知道你什么时候实例化一个TestProcess.

如果做不到这一点,请检查:

ipNext = aM.open(fileName);

并确保ipNext不是null。可能找不到文件,所以null返回一个流。

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

于 2013-06-20T03:18:13.587 回答
0

感谢你们。我想通了,但是你们可能可以从代码中看出我从未正确实例化 tp 对象。我所做的只是声明对象。我将这行代码添加到 onCreate 方法中。

    tp = new TestProcessor(this);
于 2013-06-20T15:18:00.193 回答