dongyi1524 2015-11-12 10:56
浏览 85
已采纳

Android JSON解析凌空图书馆?

I have been struggling to understand the logic of the Android JSON Parsing with volley libraries.I am trying to get JSON Array and parse with Volley Libraries.I understand how JSON data is extracted from PHP file but I have big problems. makeJsonArrayRequest() function runs correctly and parse JSON Array from get_data.php file and add users ArrayList from User class in each iteration.I called this function in onCreate and userLogin function individually.Size of users ArrayList equals to 0 when I call makeJsonArrayRequest() function in onCreate method .However,Size of users ArrayList equals to nonzero number when I call makeJsonArrayRequest() function in userLogin method(This method called when clicked on Login Button).This is my problem.Why makeJsonArrayRequest() doesn't run on Create() method ?

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ET_NAME = (EditText) findViewById(R.id.user_name);
    ET_PASS = (EditText) findViewById(R.id.user_pass);
    pDialog = new ProgressDialog(this);
    pDialog.setMessage("Please wait...");
    pDialog.setCancelable(false);
    makeJsonArrayRequest();
    Toast.makeText(getApplicationContext(),"Size:" + users.size(),Toast.LENGTH_LONG).show();

}


public  void userLogin(View view) {
    login_name = ET_NAME.getText().toString();
    login_pass = ET_PASS.getText().toString();
    String method = "login";
    String status = "1";
    BackgroundTask backgroundTask = new BackgroundTask(this);
    backgroundTask.execute(method, login_name, login_pass, status);
    Intent i = new Intent(this,MapsActivity.class);
    i.putExtra("username",login_name);
    i.putExtra("userpass", login_pass);
    makeJsonArrayRequest();
    startActivity(i);
    Toast.makeText(getApplicationContext(),"Size:" + users.size(),Toast.LENGTH_LONG).show();
}

private void makeJsonArrayRequest() {


    showpDialog();

    JsonArrayRequest req = new JsonArrayRequest(JSON_URL,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.d(TAG, response.toString());

                    try {
                        // Parsing json array response
                        // loop through each json object


                        jsonResponse ="";
                        for (int i = 0; i < response.length(); i++) {


                            JSONObject person = (JSONObject) response.get(i);

                            String name = person.getString("name");
                            String username = person.getString("username");
                            String password = person.getString("password");
                            double latitude = Double.parseDouble(person.getString("latitude"));
                            double longitude = Double.parseDouble(person.getString("longitude"));
                            String status = person.getString("status");

                            User  user = new User(name,username,password,latitude,longitude,status);

                            users.add(user);

                        }



                    } catch (JSONException e) {
                        e.printStackTrace();
                        Toast.makeText(getApplicationContext(),
                                "Error: " + e.getMessage(),
                                Toast.LENGTH_LONG).show();
                    }
                    hidepDialog();


                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.d(TAG, "Error: " + error.getMessage());
            Toast.makeText(getApplicationContext(),
                    error.getMessage(), Toast.LENGTH_SHORT).show();
            hidepDialog();

        }
    });

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(req);
}

展开全部

  • 写回答

1条回答 默认 最新

  • doutucui0133 2015-11-28 12:12
    关注

    If what you're saying is :

    I run the request in onCreate() and check - it's empty.

    and then:

    I run it again LATER, and Check - it's full.

    then have you considered the request latency? it takes time (albeit - not much time) for the request to return, you might be checking before it does

    EDIT: Run what you want inside the onResponse(), that's only called when the request returns.

    Hope this helps.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部