在android中解析简单的json字符串

2024-03-10

我想使用 json 创建一个登录和注册系统。 我想首先获取 url 的内容,然后解析 json 字符串。 Json 字符串示例:

{ "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;
    }













}

现在我不知道我能做什么来解析字符串并获取状态或消息,感谢 helm 。我非常需要这个,很抱歉提出这个问题。 问候


您可以使用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 的一致性,您应该检查key是否存在 http://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String) first.

您还应该检查您的 JSON 数据类型,您的姓名、用户名和电子邮件似乎都是整数。然而,这些很少是整数。

JSONObject 文档 http://developer.android.com/reference/org/json/JSONObject.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在android中解析简单的json字符串 的相关文章

随机推荐

  • EnumProcessModulesEx 和 CreateToolhelp32Snapshot 失败 - 无论是 32 位还是 64 位

    Edit 这个问题的答案在这里 https stackoverflow com a 27317947 996540 https stackoverflow com a 27317947 996540 在 msvc 中创建项目时 默认启用选项
  • 如何隐藏VSCode的Java编译器路径?

    当我在 vscode 的集成终端中运行 java 程序时 完整的 java 路径显示为一个大文本框 有什么办法可以摆脱这个吗 Library Java JavaVirtualMachines jdk 13 0 1 jdk Contents
  • 350 多个错误:类型“blah.blah.blah”已包含定义?

    这是什么意思 是否因为我有两个不同的 DBML 文件包含相同的数据库表 Error 343 The type mvc Models Bundle already contains a definition for BundleIcon C
  • 将多个值添加到一个 numpy 数组索引

    简单版本 如果我这样做 import numpy as np a np zeros 2 a 1 1 np array 1 1 I get 0 1 作为输出 但我想要 0 2 这是否可能以某种方式使用隐式 numpy 循环而不是我自己循环 我
  • 输入是自动关闭的并且不应该有内容

    当我加载 Express 网页时 出现以下错误 表达 500 错误 app views index jade 114 112 TD 2 113 TD 4 年 gt 114 输入是自动关闭的并且不应该有内容 112 td 2 113 td 4
  • 使用数据源和实体框架填充以编程方式声明的 datagridview

    只是 c winforms datagridview 存在一些小问题 这是我的场景 我正在使用实体框架 并尝试将某些实体模型绑定到我的 datagridview 数据源 var query from q in context foo sel
  • PHP 致命错误:未找到接口“JsonSerialized”

    我今天已将我的 D8 站点从 Windows 迁移并配置到 Ubuntu 14 04 PC 但是当我运行该网站时 我收到以下错误 致命错误 在第 32 行 var www eCartZone core lib Drupal Componen
  • 提供随机访问的整数序列压缩

    我有一个小范围内的 n 个整数序列 0 k 并且所有整数都有相同的频率f 所以序列的大小是n f k 我现在想做的是压缩这个序列 同时提供随机访问 第 i 个整数是多少 实现随机访问的时间不一定是 O 1 我更感兴趣的是以更高的随机访问时间
  • 无法访问 Spring Boot 和 Jersey 应用程序中的某些控制器

    我在访问某些控制器时遇到一个小问题 当我发送请求至 我得到一个 HTTP 404 同样的movies path package com emo server Configuration ComponentScan com emo serve
  • 从电子邮件文本中解析“发件人”地址

    我正在尝试从电子邮件的纯文本记录中提取电子邮件地址 我拼凑了一些代码来查找地址本身 但我不知道如何让它区分它们 现在它只是输出文件中的所有电子邮件地址 我想让它只吐出以 发件人 和一些通配符开头 并以 gt 结尾的地址 因为电子邮件设置为
  • 查找第二个 vlookup 值

    我在工作表 SKU DATA 的单元格 J2 中有以下 vlookup 公式 VLOOKUP A2 DUPLICATE C AJ 34 0 但是 在 重复 工作表范围的第 34 列中 有 2 个可能的结果 最多只有 2 个结果 Vlooku
  • $.post() 没有时间运行?

    我试图在提交表单之前将数据从表单发送到外部脚本 但我似乎无法让数据到达外部脚本 除非我return false 在表格本身上 document ready function Handle Form Submission mainForm s
  • 无法在 Mac OSX 上使用 gtk3 FileChooser?

    我将使用 gtk 3 0 构建的程序从 Linux 迁移到 Mac OS X 10 6 8 而且我编译的程序没有错误 但是 在启动程序并选择打开文件后 终端显示以下消息 GLib GIO CRITICAL Settings schema o
  • 在我的 Mac 上安装 python 包(ffnet、spacepy)时找不到 -lbundle1.o 的库

    我在我的 mac 10 9 上安装了 anaconda python 发行版 我正在尝试安装ffnet http ffnet sourceforge net包和SpacePy http spacepy lanl gov包 但这样做时遇到麻烦
  • vl_dsift 尝试获取每个像素的特征向量

    我正在尝试使用 vl dsift 获取每个像素的 128 1 特征向量 因此我希望得到的矩阵具有大小 128 像素数 然而 当我在尺寸为 192 168 的图像上使用它时 生成的描述符给出尺寸 128 31 185 binsize 为 1
  • Designer 在加载/卸载时由 Visual Studio 添加然后删除

    有人以前见过这个吗 我有一个大型 Visual Studio 项目 不断添加 Subtype Designer Subtype to my vcproj然后在项目的下一次打开和关闭时将其删除 中只定义了一个类StoredImageContr
  • 实体框架设计器中的空白字符串默认值

    是否可以在实体框架的 EDMX 设计器中分配一个空白字符串 即 作为默认值 我发现的唯一技术是使用文本编辑器手动编辑 edmx 文件 我意识到这是一个非常古老的问题 但为了后代的缘故 在 EF4 设计器中 您可以在属性窗口字段中键入一个空格
  • 在 Swift 中创建 JSON 数组

    我的后端需要以下 JSON 正文 number 561310 number 132333 number 561310 当我像这样输入时 它在 Postman 中运行得非常好 如何使用 Swift 创建类似的 JSON 现在我有一个字符串类型
  • 304 If-None-Match有效时未修改

    我正在优化 Express JSON API 以供 iOS 和 Android 应用程序使用 当应用程序在 If None Match 标头中指定 etag 时 似乎无法让 Express 使用正确的 304 标头进行响应 我不需要设置 E
  • 在android中解析简单的json字符串

    我想使用 json 创建一个登录和注册系统 我想首先获取 url 的内容 然后解析 json 字符串 Json 字符串示例 employee mesg username is exsist id 0 name 0 username 0 em