2013-07-23 39 views
0

我有一個讓我瘋狂的小問題。 我有一個類(不活動),它擴展了Java類「線程」。在這個cass中,我將一些PostJson變量下載到Run()方法中。在課堂和活動之間傳遞陣列

在這個Run()方法中,我調用Object的構造函數,然後檢查剛下載的Json變量,以便創建一個新的Object。 所有這一切都爲Cicle中的每個JsonPost集合創建一個新對象。

public class GetChargePoint extends Thread{ 


    JSONObject obj; 
    JSONArray jArray; 
    InputStream inputStream = null; 
    Handler handler; 

    private ConnectionSource connectionSource; 

    public ArrayList<ChargePoint_db> chargePointList = null; 

    public GetChargePoint(Handler handler) { 
     super(); 

     this.handler = handler; 
     try { 

     } catch (MalformedURLException ex) { 

      ex.printStackTrace(); 
     } 
    } 


@Override 
    public void run() { 

     ... 

      for (int i = 0; i < jArray.length(); i++) { 
       try { 
        JSONObject oneObject = jArray.getJSONObject(i); 

        String name = oneObject.getString("Name"); 
        String address = oneObject.getString("Address"); 
        String description = oneObject.getString("Description"); 
        String ownerTelNumber = oneObject 
          .getString("OwnerTelNumber"); 
        String serialNumber = oneObject.getString("SerialNumber"); 
        String dateModified = oneObject.getString("DateModified"); 
        String id = oneObject.getString("Id"); 

        int pointModelId = oneObject.getInt("PointModelId"); 
        int maxNominalPowerKw = oneObject 
          .getInt("MaxNominalPowerkW"); 

        boolean hasAcceleratedCharge = oneObject 
          .getBoolean("HasAcceleratedCharge"); 

        boolean isInMaintenance = oneObject 
          .getBoolean("IsInMaintenance"); 
        boolean active = oneObject.getBoolean("Active"); 
        boolean isDeleted = oneObject.getBoolean("IsDeleted"); 
        boolean hasFastCharge = oneObject 
          .getBoolean("HasFastCharge"); 

        double latitude = oneObject.getDouble("Latitude"); 
        double longitude = oneObject.getDouble("Longitude"); 


//calling the constructor. 
        Object object= new Object(id, 
          serialNumber, name, description, address, 
          maxNominalPowerKw, hasAcceleratedCharge, 
          hasFastCharge, ownerTelNumber, false, pointModelId, 
          active, isInMaintenance, 0, dateModified, latitude, 
          longitude); 

        chargePoint.save(repo); 
        chargePointList.add(object); 

... 

到目前爲止好。 但是你可以看到,我想填進一個ArrayList「chargePointList所有新對象創建。

的問題是,當到另一個活動我把這個類來獲取ArrayList中,這個返回null。 哪有我同意填補了類和其他活動之間的ArrayList?

謝謝:)

+0

選中此項 - http://developer.android.com/guide/faq/framework.html#3 – Shaiful

+0

該處理程序保留對創建它的上下文的引用,這可能是您頭痛的原因。 – mach

+0

可能的重複:http://stackoverflow.com/questions/12820758/android-intent-use-intent-to-pass-class-objects-from-activities –

回答

0

GetChargePoint類的run方法是從你的Activity類的事件調用。這樣你就可以返回到列表調用活動課,然後你可以通過列表從你的活動到另一項活動;

if(list!= null && list.size() > 0) 
{ 
    Intent intent = new Intent(MainActivity.this,NextActList.class); 
    intent .putExtra("list", list);     
    intent .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(drugIntent); 
}else{ 


} 
0

你可以讓你調用活動實施某種形式的偵聽器接口的,就像這樣:

interface ChargePointsDownloadListener { 
    public void updateChartPoints(ArrayList newChargePoints); 
} 

,並且活動:

public class ChargePointActivity extends Activity implements ChargePointsDownloadListener 
{ 
    @Override 
    public void updateChartPoints(ArrayList<ChargePoint_db> newChargePoints) 
    { 
    this.chargePointsList = newChargePoints; 
    } 
} 

而且從那時起,只傳遞一個ChargePointsDownloadListener實例您GetChargePoint構造函數。當你的線程執行時,調用監聽器的updateChartPoints,然後將GetChargePoint類中的監聽器引用設置爲null - 否則Activity將會泄漏,這不是一件好事。

另一種解決方案是使用AsyncTask而不是Thread,但仍然需要對Activity的引用,以便將它傳遞給新的ArrayList。

+0

謝謝:)我正在嘗試你的解決方案!但如果我需要獲取所有的ArrayList,我該怎麼辦? @npace – Pikkio

+0

你是什麼意思得到所有的ArrayList?在for循環之後調用updateChartPoints。 – npace

+0

我做到了,但錯誤是空指針異常...在調試arraylist返回null :( – Pikkio