我有一个像这样的json解析

public class SecondFragment extends Fragment implements OnClickListener {


// URL to get contacts JSON
private static String contestUrl = "http://api.apps.com/contest";

// JSON Node names
private static final String TAG_ITEM_ID = "id";
private static final String TAG_URL = "url";
private static final String TAG_START_DATE = "start_date";
private static final String TAG_END_DATE = "end_date";

// contacts JSONArray
JSONArray foods = null;

// Hashmap for ListView
ArrayList<HashMap<String, String>> foodslist;



}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onActivityCreated(savedInstanceState);

    foodslist = new ArrayList<HashMap<String, String>>();




 // Calling async task to get json
    new GetContacts().execute();

}

/**
 * Async task class to get json by making HTTP call
 * */
private class GetContacts extends AsyncTask<Void, Void, Void> {
    @Override
    protected Void doInBackground(Void... arg0) {
        // Creating service handler class instance
        ServiceHandler sh = new ServiceHandler();

        // Making a request to url and getting response
        String jsonStr = sh.makeServiceCall(contestUrl, ServiceHandler.GET);

        Log.d("Response: ", "> " + jsonStr);

        if (jsonStr != null) {
            try {

                foods = new JSONArray(jsonStr);

                // looping through All Contacts
                for (int i = 0; i < foods.length(); i++) {
                    JSONObject c = foods.getJSONObject(i);

                    String id = c.getString(TAG_ITEM_ID);
                    String name = c.getString(TAG_URL);
                    String email = c.getString(TAG_START_DATE);
                    String address = c.getString(TAG_END_DATE);

                    // tmp hashmap for single contact
                    HashMap<String, String> contact = new HashMap<String, String>();

                    // adding each child node to HashMap key => value
                    contact.put(TAG_ITEM_ID, id);
                    contact.put(TAG_URL, name);
                    contact.put(TAG_START_DATE, email);
                    contact.put(TAG_END_DATE, address);

                    String start_date = (String)contact.get(TAG_ITEM_ID);

                    // adding contact to contact list
                    foodslist.add(contact);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        } else {
            Log.e("ServiceHandler", "Couldn't get any data from the url");
        }

        return null;
    }
}


}

我有两个功能,onCreateGetContacts。在onCreate的末尾,它调用GetContacts并调用此json。

我的问题是,如何获得Hashmap上的GetContacts值,以便可以在onCreate上使用它

到目前为止,我得到了这个以获取Hashmap的值

String start_date = (String)contact.get(TAG_ITEM_ID);

但是,它仅适用于GetContacts
有人可以帮助我吗?

谢谢之前

最佳答案

有几种方法:

方式一:
创建HashMap联系人的实例变量(类级别),然后可以在类中的任何位置使用它,包括onCreate和getContacts方法。

package stackoverflow.q_25034927;

import java.util.HashMap;
import java.util.Map;

public class PassVariable {
    private static Map<String, String> contact = new HashMap<String, String>();

    public void onCreate() {
        //populate contact object as per your logic
        getContacts();
    }

    private void getContacts() {
        //Use contact object directly which was pre-populby onCreate method.
    }
}


方式2:
将地图传递到getContacts()方法:

package stackoverflow.q_25034927;

import java.util.HashMap;
import java.util.Map;

public class PassVariable {

    public void onCreate() {
        final Map<String, String> contact = new HashMap<String, String>();
        //populate contact object as per your logic.
        getContacts(contact);
    }

    private void getContacts(Map<String, String> contact) {
        //Use contact object which is passed as argument.
    }
}




另一方面,在命名Java方法或变量时,请使用cameCasing。 GetContacts不正确,使其变为getContacts。

对于电子邮件和地址字段,使用TAG_START_DATE和TAG_END_DATE不好玩。 :-)

String email = c.getString(TAG_START_DATE);
String address = c.getString(TAG_END_DATE);




要回答下面的#3,在NotInner类中不能访问变量s:

package com.test;

public class Test {
    static String s = "";
}

class NotInner {
    public static void main(String[] args) {
        System.out.println(s); //Compilation error: s cannot be resolved to a variable
    }
}

10-05 23:21