如何解析在android中有两个键和值的Json Array和Json Object?

时间:2017-06-29 07:41:22

标签: android json

我想从SQL数据库中的wallet数组中填充我的微调器,然后将用户选择的钱包ID存储在特定的用户详细信息中,而不是钱包名称中。我已经编写了这个特殊的代码,并且还添加了屏幕截图以及错误。

Android部分

public class User extends AppCompatActivity {

ArrayAdapter<String> adapter;
ArrayList<Populate> listItems;
LinkedHashMap<String,String> walletId;
Button logout,editdetails;
SharedPreferences sp;
SharedPreferences.Editor editor;
public static final String DEFAULT = "N/A";
TextView usermail;
String email;
int id;
public static final int DEFAULTI = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_user);



    listItems = new ArrayList<>();

    usermail = (TextView) findViewById(R.id.usermail);
    editdetails = (Button) findViewById(R.id.editdetails);
    logout = (Button) findViewById(R.id.logout);

    sp = getSharedPreferences("Login", Context.MODE_PRIVATE);
    email = sp.getString("email", DEFAULT);
    usermail.setText("Welcome " + email);
    id = sp.getInt("id",DEFAULTI);

    logout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            /** pref = getSharedPreferences("Login", Context.MODE_PRIVATE);
             editor = pref.edit();
             editor.putBoolean("loginfirst",false);
             editor.commit();**/
            Intent i = new Intent(User.this, Login.class);
            startActivity(i);
            finish();
        }
    });
}
public void onEdit(View v){
    BackgroundTask backgroundTask = new BackgroundTask();
    backgroundTask.execute(String.valueOf(id));

}

class BackgroundTask extends AsyncTask<String, Void, String> {

    ArrayList<Populate> list;
    String add_info_url;

    @Override
    protected void onPreExecute() {
        list=new ArrayList<>();
        add_info_url = "http://192.168.2.6/Deal%20Engine/editdetails.php";

    }

    @Override
    protected void onPostExecute(String result) {
        listItems.addAll(list);


        Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();
        //SharedPreferences sp = getSharedPreferences("Login",Context.MODE_PRIVATE);


        Intent i = new Intent(User.this, EditDetails.class);
        startActivity(i);


    }

    @Override
    protected String doInBackground(String... args) {


        BufferedReader reader = null;
        try {
            URL url = new URL(add_info_url);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.setDoOutput(true);
            OutputStream outputStream = httpURLConnection.getOutputStream();
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
            String dataString = URLEncoder.encode("id", "UTF-8") + "=" + URLEncoder.encode(String.valueOf(id), "UTF-8");

            Log.d("id", String.valueOf(id));
            bufferedWriter.write(dataString);
            Log.d("Result", dataString);
            bufferedWriter.flush();
            bufferedWriter.close();
            outputStream.close();
            InputStream inputStream = httpURLConnection.getInputStream();

            reader = new BufferedReader(new InputStreamReader(inputStream));
            StringBuffer buffer = new StringBuffer();
            String line = "";
            while ((line = reader.readLine()) != null) {
                buffer.append(line);
            }
            String finalJson = buffer.toString();
            Log.d("String", finalJson);

            JSONObject parentObject = new JSONObject(finalJson);
            JSONArray parentArray = parentObject.getJSONArray("user");
            StringBuffer finalBufferedData = new StringBuffer();
            for (int i = 0; i < parentArray.length(); i++) {
                JSONObject finalObject = parentArray.getJSONObject(i);
                int status_code = finalObject.getInt("status_code");
                String status_desc = finalObject.getString("status_desc");
                String user_id = finalObject.getString("user_id");
                int id = finalObject.getInt("id");
                String name=finalObject.getString("name");
                String pass= finalObject.getString("pass");
                String location = finalObject.getString("location");
                String cards=finalObject.getString("cards");
                String category= finalObject.getString("category");
                String wallet = finalObject.getString("wallet");
                String operator=finalObject.getString("operator");
                String loyaltyProgram= finalObject.getString("loyaltyProgram");
                String membership= finalObject.getString("membership");
                JSONObject walletArrayObject = new JSONObject(finalObject.getString("wallet_array"));
                JSONArray walletArray = walletArrayObject.getJSONArray("wallets");
                Log.d("Arraysize",String.valueOf(walletArray));
                for(int j =0;j<walletArray.length();j++)
                {
                    JSONObject walletObject = walletArray.getJSONObject(j);
                    list.add(new Populate(String.valueOf(walletObject.getInt("id")),walletObject.getString("wallet_name")));
                }
                sp = getSharedPreferences("Login",Context.MODE_PRIVATE);
                editor=sp.edit();
                editor.putString("name",name);
                editor.putString("pass",pass);
                editor.putInt("id",id);
                editor.putString("location",location);
                editor.putString("cards",cards);
                editor.putString("category",category);
                editor.putString("wallet",wallet);
                editor.putString("operator",operator);
                editor.putString("wallets",String.valueOf(list));
                editor.putString("loyaltyProgram",loyaltyProgram);
                editor.putString("membership",membership);
                editor.commit();
                finalBufferedData.append(status_code + " - " + status_desc + " -" + user_id + " -"+id +  " -"+name+ " -"+list +"\n");
            }


            inputStream.close();
            httpURLConnection.disconnect();
            Log.d("Result", dataString);
            return finalBufferedData.toString();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);
    }


 }


}

错误我正在

06-29 12:53:08.015 28974-28988/com.example.tanmayjain.twowaycommunication D/String: {"user":[{"status_code":"1","status_desc":"Success","user_id":"482","id":"26","name":"tanmay ","pass":"a006b22f887f7d922bafa4c8186ccafd","location":"Ahmedabad","cards":"ICICI Bank","category":"Platinum","wallet":"","operator":"Vodafone","loyaltyProgram":"Any","membership":"All Time","wallet_array":"{\"wallets\":[{\"1\":[\"Paytm\"],\"2\":[\"Freecharge\"],\"3\":[\"Mobikwik\"],\"4\":[\"PayUmoney\"],\"5\":[\"CitrusCash\"],\"6\":[\"Airtel Money\"],\"7\":[\"Oxigen Wallet\"],\"8\":[\"OLAMoney\"],\"9\":[\"HDFC PayZapp\"],\"10\":[\"Chillr by HDFC\"],\"11\":[\"Pockets by ICICI bank\"],\"12\":[\"JioMoney\"],\"13\":[\"SBI Buddy\"],\"14\":[\"mRupee\"],\"15\":[\"Itzcash\"]}]}"}]}
06-29 12:53:08.015 28974-28988/com.example.tanmayjain.twowaycommunication D/Arraysize: [{"1":["Paytm"],"2":["Freecharge"],"3":["Mobikwik"],"4":["PayUmoney"],"5":["CitrusCash"],"6":["Airtel Money"],"7":["Oxigen Wallet"],"8":["OLAMoney"],"9":["HDFC PayZapp"],"10":["Chillr by HDFC"],"11":["Pockets by ICICI bank"],"12":["JioMoney"],"13":["SBI Buddy"],"14":["mRupee"],"15":["Itzcash"]}]
06-29 12:53:08.016 28974-28988/com.example.tanmayjain.twowaycommunication W/System.err: org.json.JSONException: No value for id
06-29 12:53:08.016 28974-28988/com.example.tanmayjain.twowaycommunication W/System.err:     at org.json.JSONObject.get(JSONObject.java:389)
06-29 12:53:08.016 28974-28988/com.example.tanmayjain.twowaycommunication W/System.err:     at org.json.JSONObject.getInt(JSONObject.java:478)
06-29 12:53:08.016 28974-28988/com.example.tanmayjain.twowaycommunication W/System.err:     at com.example.tanmayjain.twowaycommunication.User$BackgroundTask.doInBackground(User.java:167)
06-29 12:53:08.017 28974-28988/com.example.tanmayjain.twowaycommunication W/System.err:     at com.example.tanmayjain.twowaycommunication.User$BackgroundTask.doInBackground(User.java:85)
06-29 12:53:08.017 28974-28988/com.example.tanmayjain.twowaycommunication W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:295)

I want to fetch id and wallet name from the array displayed in array size but i am getting this error.

1 个答案:

答案 0 :(得分:0)

你的json错了,因为你的walletObject包含这个:

{
"wallets": [{
    "1": ["Paytm"],
    "2": ["Freecharge"],
    "3": ["Mobikwik"],
    "4": ["PayUmoney"],
    "5": ["CitrusCash"],
    "6": ["Airtel Money"],
    "7": ["Oxigen Wallet"],
    "8": ["OLAMoney"],
    "9": ["HDFC PayZapp"],
    "10": ["Chillr by HDFC"],
    "11": ["Pockets by ICICI bank"],
    "12": ["JioMoney"],
    "13": ["SBI Buddy"],
    "14": ["mRupee"],
    "15": ["Itzcash"]
}]
}

您收到错误是因为您希望获取 id 属性的值,但您的json不包含id字段。

你的json有更多问题:  1.发送一个对象而不是数组(wallet_array)  2.更改钱包对象结构

我认为你应该使用这个json结构:

{ "user": [{ "status_code": "1", "status_desc": "Success", "user_id": "482", "id": "26", "name": "tanmay ", "pass": "a006b22f887f7d922bafa4c8186ccafd", "location": "Ahmedabad", "cards": "ICICI Bank", "category": "Platinum", "wallet": "", "operator": "Vodafone", "loyaltyProgram": "Any", "membership": "All Time", "wallet_array": [{ "id": 1, "name": "Paytm" }, { "id": 2, "name": "Freecharge" }, { "id": 3, "name": "Mobikwik" }, { "id": 4, "name": "PayUmoney" }, { "id": 5, "name": "CitrusCash" }, { "id": 6, "name": "Airtel Money" }, { "id": 7, "name": "Oxigen Wallet" }, { "id": 8, "name": "OLAMoney" }, { "id": 9, "name": "HDFC PayZapp" } ] }] }