putSerializable在Android中不起作用

时间:2015-09-29 14:06:54

标签: android android-intent

我一直在寻找解决如何将多个值从一个类传递到另一个类的方法。

我最近找到了一种方法,即使用putSerializable来做这件事,但还没有成功。我只能将最后的经度和纬度归还给另一个班级。

这是我的数组json字符串:

{"longitude":"101.9366229","latitude":"1.236459"},
{"longitude":"101.930041","latitude":"1.224119"}]

以下是我传递值的代码:

class Findfriends extends AsyncTask<String, String, JSONObject> {
        final String TAG = "Findfriends.java";
        protected JSONObject doInBackground(String... args) {
            // TODO Auto-generated method stub
            // here Check for success tag
            try {
                HashMap<String, String> params = new HashMap<>();
                params.put("username", args[0]);
                JSONObject json = jsonParser.makeHttpRequest(
                        GET_FRIENDS, "POST", params);

                if (json != null) {
                    Log.d("JSON result", json.toString());

                    return json;
                }

            } catch (Exception e) {
                e.printStackTrace();
            }

            return null;
        }

        protected void onPostExecute(JSONObject json) {

            if (json != null) {
                Toast.makeText(Borrower_AP.this, json.toString(),
                        Toast.LENGTH_LONG).show();

                try {
                    dataJsonArr = json.getJSONArray("Posts");
                    for (int i = 0; i < dataJsonArr.length(); i++) {
                        JSONObject c = dataJsonArr.getJSONObject(i);
                        Longitude = c.getDouble("longitude");
                        Latitude = c.getDouble("latitude");
                        Log.e(TAG, "Longitude: " + Longitude
                                + ", Latitude: " + Latitude);
                        coordinates.setLongt(Longitude);
                        coordinates.setLat(Latitude);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }
    public class Coordinates implements Serializable {

    private Double lat;
    private Double longt;

    public Double getLat () {
        return lat;
    }
    public void setLat(Double lat) {
        this.lat = lat;
    }
    public Double getLongt() {
        return longt;
    }
    public void setLongt(Double longt) {
        this.longt = longt;
    }

}

获取值:

Intent intent=this.getIntent();
    Bundle bundle=intent.getExtras();

    Coordinates coordinates=(Coordinates)bundle.getSerializable("coordinates");
    System.out.println("Lat:" + coordinates.getLat());
    System.out.println("Long:" + coordinates.getLongt());

1 个答案:

答案 0 :(得分:1)

根据您的要求,您需要您的类的Arraylist坐标只是在循环中向它添加对象,您解析json并将其发送到另一个活动,并在新活动中通过将其转换为Coordinates arraylist来获取它 这是样本

如果我认为onpost方法中的坐标是arraylist

  ArrayList<Coordinates> coordinates=new ArrayList<Coordinates>();

在你的onpost forloop

使用以下

for (int i = 0; i < dataJsonArr.length(); i++) {
                        JSONObject c = dataJsonArr.getJSONObject(i);
                        Longitude = c.getDouble("longitude");
                        Latitude = c.getDouble("latitude");
                        Log.e(TAG, "Longitude: " + Longitude
                                + ", Latitude: " + Latitude);
                      Coordinates  coordinatesobj=new Coordinates();
                        coordinatesobj.setLongt(Longitude);
                        coordinatesobj.setLat(Latitude);
                         coordinates.add(coordinatesobj);
                    }

你在那里开始新活动的地方

Intent intent = new Intent(SourceActivity.this, TargetActivity.class);
  intent.putExtra("key", coordinates);

接收方活动

Intent intent=this.getIntent();
    Bundle bundle=intent.getExtras();

     ArrayList<Coordinates> coordinates=( ArrayList<Coordinates>)bundle.getSerializable("key");

希望有所帮助