繁体   English   中英

如何在Android中使用Java从php获取Json?

[英]How to get Json from php with java in android?

我想遍历json并检查每个名称以查看我在edittext中键入的内容是否与get_user.php中json中的内容匹配...

//json
    class AttemptLogin extends AsyncTask<String, String, String> {


        JSONArray jArray = new JSONArray( );

        @Override protected void onPreExecute()
        { super.onPreExecute();
            pDialog = new ProgressDialog(LoginWithAccount.this);
            pDialog.setMessage("Attempting for login...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show(); }
        @Override
        protected String doInBackground(String... params) {
            int success;
           //here i will get the name and password from my edittexts
            String username = EditName.getText().toString();
            String password = EditPassword.getText().toString();
            try {  
                List<NameValuePair> params2 = new ArrayList<NameValuePair>();

                params2.add(new BasicNameValuePair("nume", username));
                params2.add(new BasicNameValuePair("parola", password));
                Log.d("request!", "starting");
                JSONObject json = jsonParser.makeHttpRequest( LOGIN_URL, "POST", params2);
                Log.d("Login attempt", json.toString());
                success = json.getInt(TAG_SUCCESS);

                String nume_json, parola_json;

                if (success == 1)
                {
                    Log.d("Successfully Login!", json.toString());
                   // return json.getString(TAG_MESSAGE);
                    for(int i = 0 ; i<jArray.length() ;i++)
                    {Log.d("here1", json.toString());
                        json = jArray.getJSONObject(i);
                        nume_json = json.getString("nume");
                        parola_json = json.getString("parola");
                   //     Toast.makeText(LoginWithAccount.this,     nume_json, Toast.LENGTH_SHORT).show();
                        if ( EditName.getText().toString().matches(nume_json)&& EditPassword.getText().toString().matches(parola_json))
                        {  Log.d("yess", json.toString());
                            get_user_json = true;
                        }
                    }

                }
                else
                {
                  //  get_user_json = false;
                    return json.getString(TAG_MESSAGE);

                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
         }
        protected void onPostExecute(String message)
        { pDialog.dismiss();
            if (message != null)
            { Toast.makeText(LoginWithAccount.this, message, Toast.LENGTH_LONG).show();
            }
        }
    }

我究竟做错了什么? 我无法通过json检查每个名称,我的json只有名称和密码,但是我无法检查它们。

为什么不等待从URL提取完整结果? 是否应该在onPostExecute中对其进行检查? 以及为什么要在doinbackground方法中获取edittext值? ui相关的事情应该在其他地方完成。 使用公用的公共静态变量来存储它们,然后再使用它们将是更好的方法。 假设您有一个活动Login.java,并且有一个AsyncTask类LoginAsyncTask.java。 现在,在两个变量中获取edittexts的值(即您的ID和密码)。 现在实例化loginasynctask类的对象,并在其构造函数中发送上下文,uid和pwd值。 在异步任务的onPreexecute中,创建进度对话框。 在doinbackground中,您需要点击网址以获取值。 使用连接超时,套接字超时和一般异常。 创建另一个方法来解析json返回。 创建一个简单的arraylist来存储所有返回和解析的值。 在onpostExecute中,调用此json解析方法。 现在,运行一个循环并检查匹配项。 使用接口方法为您的活动创建适当的回调。 如果找到匹配项,则为接口方法的参数设置一个值(可能是布尔值或字符串“ success”或“ failure”)。 在活动上实现接口,并在覆盖的方法中检查值come(该布尔值或字符串)。 采取相应的措施。 希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM