java - 如何调用 php 文件并存储 json 输出

标签 java android json

我正在开发一个 Android 应用程序,我遇到了一种情况,该应用程序将使用 API 向 php Web 服务发送一些数据,并且 Web 服务将接收一些 json 编码的消息,该消息将被回显。

我的问题是

  1. 如何将 php echo 发送的 json 消息存储到 Android 应用程序中的变量中?
  2. 然后我如何解析 json 并使用数据构建 switch case?

我曾经提出过类似的问题,并被告知使用 AsyncTask 但我不明白的是为什么我需要使用它。

phpwebservice 将发送的示例 json 响应是

{"error":false,"message":"New user created"}

我希望能够获取错误变量并确定是否存在任何错误,同时获取变量中的消息并将其显示给应用程序中的用户。

我目前有这样的 android signup.java 代码

public void post() throws UnsupportedEncodingException
    {
        // Get user defined values
        uname = username.getText().toString();
        email   = mail.getText().toString();
        password   = pass.getText().toString();
        confirmpass   = cpass.getText().toString();
        phone = phn.getText().toString();

        HttpClient httpclient = new DefaultHttpClient();
        HttpResponse httpResponse = null;
        HttpPost httppost = new HttpPost("http://www.rgbpallete.in/led/api/signup");
        if (password.equals(confirmpass)) {
            try {
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(4);
                nameValuePairs.add(new BasicNameValuePair("uname", uname));
                nameValuePairs.add(new BasicNameValuePair("pass", password));
                nameValuePairs.add(new BasicNameValuePair("email", email));
                nameValuePairs.add(new BasicNameValuePair("phone", phone));
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                httpResponse = httpclient.execute(httppost);
                //Code to check if user was successfully created
                final int statusCode = httpResponse.getStatusLine().getStatusCode();
                switch (statusCode)
                {
                    case 201:
                        Toast.makeText(getBaseContext(), "Successfully Registered", Toast.LENGTH_SHORT).show();
                        break;
                    case 400:
                        Toast.makeText(getBaseContext(), "Username already taken", Toast.LENGTH_SHORT).show();
                        username.setText("");
                        break;
                    default:
                        Toast.makeText(getBaseContext(), "Unknown error occurred", Toast.LENGTH_SHORT).show();
                }
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        else
        {
            Toast.makeText(getBaseContext(), "Password mismatch", Toast.LENGTH_SHORT).show();
            //Reset password fields
            pass.setText("");
            cpass.setText("");
        }

    }

虽然这会检查http header 代码并且可能有效(我还没有测试过),但我想使用jsnon响应并使用它进行处理。

最佳答案

使用java-json :

HttpURLConnection urlConnection = (HttpURLConnection) (uri.toURL().openConnection());
urlConnection.setConnectTimeout(1500);
urlConnection.setRequestMethod("POST");
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);

List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("uname", uname));
params.add(new BasicNameValuePair("pass", password));
params.add(new BasicNameValuePair("email", email));

OutputStream os = urlConnection.getOutputStream();
BufferedWriter writer = new BufferedWriter(
    new OutputStreamWriter(os, "UTF-8"));
writer.write(getQuery(params));
writer.flush();
writer.close();
os.close();

urlConnection.connect();
if(urlConnection.getResponseCode() == 200){
    InputStream inputStream = new BufferedInputStream(urlConnection.getInputStream());
    BufferedReader streamReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
    StringBuilder responseStrBuilder = new StringBuilder();

    String inputStr;
    while ((inputStr = streamReader.readLine()) != null)
        responseStrBuilder.append(inputStr);
    JSONObject json = new JSONObject(responseStrBuilder.toString());
    String message = json.getString("message");
}

关于java - 如何调用 php 文件并存储 json 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27570273/

相关文章:

android - 为什么来电号码在 Intent 额外的 TelephonyManager.EXTRA_INCOMING_NUMBER 中为空?

python - 使用 pandas dataframe 中的 JSON 对象优化解析文件,其中某些行中可能缺少键

c# - JSON Youtube反序列化:如何保留Description字段的\n

java - 条件为假的 for 循环的大 O

java - 如何通过子容器调整父容器的大小?

java - 使用 FileLock 将行追加到文件

java - ResultSet 从查询转换为 int

Android:如何找出内容解析器的客户端

android - 共享元素从 viewPager 中的 recyclerView 过渡到 fragment

javascript - 如何使用多个 XMLHttpRequest?