簡體   English   中英

在Android中解析簡單的JSON字符串

[英]parse simple json string in android

我想使用json創建登錄和注冊系統。 我想首先獲取url的內容,然后解析json字符串。 Json String示例:

{ "employee":{"mesg":"username is exsist!","id":0,"name":0,"username":0,"email":0,"status":500} }

我只需要消息或狀態。 我無法解析它。 每次我想解析此字符串時,我的應用程序都會強制停止

這是我的代碼:

    package com.sourcey.materiallogindemo;

import android.app.ProgressDialog;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;

import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;



import butterknife.Bind;
import butterknife.ButterKnife;

public class SignupActivity extends AppCompatActivity {

    //URL to get JSON Array

    //JSON Node Names



    public String nurl;


    private static final String TAG = "SignupActivity";

    @Bind(R.id.input_name) EditText _nameText;
    @Bind(R.id.input_email) EditText _emailText;
    @Bind(R.id.input_tell) EditText _tellText;
    @Bind(R.id.input_password) EditText _passwordText;
    @Bind(R.id.btn_signup) Button _signupButton;
    @Bind(R.id.link_login) TextView _loginLink;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_signup);
        ButterKnife.bind(this);

        _signupButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                signup();
            }
        });

        _loginLink.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Finish the registration screen and return to the Login activity
                finish();
            }
        });
    }



    public void signup() {
        Log.d(TAG, "Signup");

        if (!validate()) {
            onSignupFailed();
            return;
        }

        _signupButton.setEnabled(false);

        final ProgressDialog progressDialog = new ProgressDialog(SignupActivity.this,
                R.style.AppTheme_Dark_Dialog);
        progressDialog.setIndeterminate(true);
        progressDialog.setMessage("در حال انجام عملیات...");
        progressDialog.show();

        String name = _nameText.getText().toString();
        String email = _emailText.getText().toString();
        String tell = _tellText.getText().toString();
        String password = _passwordText.getText().toString();

        // TODO: Implement your own signup logic here.

        nurl = "http://someurl/json/user.php?type=register&mobile="+tell+"&p="+password+"&email="+email+"&name="+name;

       //new JSONParse().execute();

        new android.os.Handler().postDelayed(
                new Runnable() {
                    public void run() {

                        onSignupSuccess();
                        progressDialog.dismiss();


                    }
                }, 3000);
    }


    public void onSignupSuccess() {
        _signupButton.setEnabled(true);
        setResult(RESULT_OK, null);
        finish();
    }

    public void onSignupFailed() {
        Toast.makeText(getBaseContext(), "Login failed", Toast.LENGTH_LONG).show();

        _signupButton.setEnabled(true);
    }

    public boolean validate() {
        boolean valid = true;

        String name = _nameText.getText().toString();
        String email = _emailText.getText().toString();
        String tell = _tellText.getText().toString();
        String password = _passwordText.getText().toString();

        if (name.isEmpty() || name.length() < 3) {
            _nameText.setError("at least 3 characters");
            valid = false;
        } else {
            _nameText.setError(null);
        }

        if (email.isEmpty() || !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
            _emailText.setError("enter a valid email address");
            valid = false;
        } else {
            _emailText.setError(null);
        }

        if (tell.isEmpty() || !android.util.Patterns.PHONE.matcher(tell).matches()) {
            _tellText.setError("enter a valid phone number");
            valid = false;
        } else {
            _tellText.setError(null);
        }

        if (password.isEmpty() || password.length() < 4 || password.length() > 10) {
            _passwordText.setError("between 4 and 10 alphanumeric characters");
            valid = false;
        } else {
            _passwordText.setError(null);
        }



        return valid;
    }













}

現在,我不知道該怎么做才能准確地解析字符串並獲取狀態或消息,謝謝您的掌舵。 我非常需要這個,抱歉提出疑問。 問候

您可以將JSONObject用於此任務。

例如(省略try / catch):

JSONObject root = new JSONObject(jsonString);
JSONObject employee = root.getJSONObject("employee");
String message = employee.getString("name");
String username = employee.getString("username");
String email = employee.getString("email");
int id = employee.getInt("id");
int status = employee.getInt("status");

如果不確定JSON的一致性,則應首先檢查密鑰是否存在

您還應該檢查JSON數據類型,名稱,用戶名和電子郵件似乎包含整數。 但是,這些很少是整數。

JSONObject文檔

使用Volley庫從URL獲取JSON響應,如下所示-

首先在您的項目Module:app依賴項中添加庫,如下所示-

dependencies {
compile 'com.mcxiaoke.volley:library-aar:1.0.1'
...
}

使用以下代碼從Volley Library獲得響應-

// Instantiate the RequestQueue.
    RequestQueue queue = Volley.newRequestQueue(this);
    String url = "WEBSERVICE_URL"; // eg:- "http://www.google.com";

    // Request a string response from the provided URL.
    StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {

                @Override
                public void onResponse(String response) {
                    System.out.println("Response is: " + response);
                    try {
                         JSONObject jobj = new JSONObject(response);
                         JSONObject jEmp = jobj.getJSONObject("employee");
                         String message = jEmp.getString("mesg");
                         int Status = jEmp.getInt("status");

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

                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {

                    if(error.networkResponse != null && error.networkResponse.data != null){
                        VolleyError verror = new VolleyError(new String(error.networkResponse.data));
                        System.out.println("That didn't work!\n" + error.toString());
                    }

                }

    });

    // Add the request to the RequestQueue.
    queue.add(stringRequest);

您可以按以下方式解析JSON-

 try {
        JSONObject jobj = new JSONObject(responseJSONString);
        JSONObject jEmp = jobj.getJSONObject("employee");
        String message = jEmp.getString("mesg");
        int Status = jEmp.getInt("status");

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

`responseJSONString` is the JSON response you got.

有一些庫可以幫助您解析Json,可以使用gsonJackson 我實際上使用了改造來調用我的API,因為它允許您插入json解串器,然后它會為您完成所有工作。 它還處理所有HTTP調用,並且使用起來非常簡單。

建議您選擇Volley。 下面是相同的示例代碼

JsonObjectRequest jsonObjReqfirst = new JsonObjectRequest(Request.Method.GET,urlBuffer.toString(),null,
                    new Response.Listener<JSONObject>(){

                        @Override
                        public void onResponse(JSONObject response) {
                            Log.i(Constants.NETLOG, "Volley response= " + response.toString());
                            getResponseprocessed(response));

                        }
                    }, new Response.ErrorListener(){
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e(Constants.NETLOG, "VolleyError response= " + error.toString());

                }
            });
            Volley.newRequestQueue(mContext).add(jsonObjReqfirst);

void getResponseprocessed(JSONObject response){
            try {
                JSONObject statusObj = response.getJSONObject("employee");
                String mseg=statusObj.getString("mesg");
                int status = statusObj.getInt("status");

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM