【问题标题】:pass arraylists between class and activity在类和活动之间传递数组列表
【发布时间】:2013-07-22 04:02:36
【问题描述】:

我有一个小问题让我发疯。 我有一个扩展 Java 类“线程”的类(不是活动)。在这个案例中,我将一些 PostJson 变量下载到 Run() 方法中。

在这个 Run() 方法中,我调用了一个 Object 的构造函数,并检查了刚刚下载的 Json 变量,以便创建一个新的 Object。 所有这些都在一个 for 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。 如何在班级和其他活动之间共享填充的数组列表??

谢谢:)

【问题讨论】:

标签: android class arraylist share


【解决方案1】:

GetChargePoint 类运行方法是从您的 Activity 类事件中调用的。因此您可以将列表返回到调用 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{


}

【讨论】:

    【解决方案2】:

    您可以让您的调用 Activity 实现某种监听器接口,如下所示:

    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 传递给它。

    【讨论】:

    • 谢谢 :) 我正在尝试您的解决方案!但是如果我需要获取所有的 ArrayList,我该怎么办? @npace
    • 获取所有的ArrayList是什么意思?在 for 循环之后只需调用 updateChartPoints。
    • 我做到了,但错误是空指针异常...在调试过程中,arraylist 返回 null :(
    猜你喜欢
    • 1970-01-01
    • 2019-05-02
    • 2015-10-01
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    相关资源
    最近更新 更多