2013-06-19 64 views
1

我想在我的活動內創建一個InputStream。它創建得很好,但我試圖將創建的InputStream傳遞給我實際上想要使用InputStream的類。 InputStream在我的活動的onClick方法內創建。第二我嘗試將InputStream對象傳遞給我的「工作類」中的一個方法,我得到一個NullPointerException。我不想在我的活動中做這項工作。我如何傳遞InputStream或者AssetManager對象來處理它。我的「工人階級」不擴展或實施任何事情。應該是?傳遞InputStream到不同的類,並得到一個空指針異常

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()); 
      } 
     } 
    } 
+6

此說明是不夠的,請添加代碼。 –

+0

如果你想傳遞對象到另一個活動,你需要使用'Parcelable'或'Serializable'。 – BlackHatSamurai

+0

它是不是另一個活動,它是我想用來實際處理數據的類 – user579426

回答

0

您還沒有發佈太多的內容。在您的線路:

ipNext = aM.open(fileName); 

你一定的AssetManager amnull在這一點?它似乎只在遠程onClick方法中初始化。我無法分辨何時你正在實例化TestProcess

如果做不到這一點,請檢查:

ipNext = aM.open(fileName); 

,並確保ipNextnull。也許文件沒有找到,所以返回一個null流。

無論如何,碰撞日誌會告訴你NPE發生的路線。從那裏你可以很快解決這個問題。

+0

我已經在上面包含了更多的代碼來顯示tp對象在哪裏實例化。 – user579426

+0

謝謝你們。我想通了,但你們可以通過代碼告訴我,我從來沒有正確實例化tp對象。我所做的只是宣佈對象。 – user579426

0

謝謝你們。我想通了,但你們可以通過代碼告訴我,我從來沒有正確實例化tp對象。我所做的只是宣佈對象。我將這一行代碼添加到了onCreate方法中。

tp = new TestProcessor(this);