【问题标题】:When i Fetching the data from mysql with json i get output under this "[ ]"当我使用 json 从 mysql 获取数据时,我在这个“[]”下得到输出
【发布时间】:2016-10-13 13:49:53
【问题描述】:

在从 api 获取数据到 android 时,在 [] 方括号下获取输出.. 但我想要没有 [] 的输出,请帮我解决这个问题..

在 android studio 中,输出类似于 [2] 但我想要输出 like "2"

这里我的 main.java

package com.example.sachin.splashlogin;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.widget.CardView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class Home extends Fragment {
    Activity activity;

    public Home() {};

    TextView visit;
    SessionManager session;
    CardView cardviewvisit, cardvieworder, cardviewpayment, cardviewdelivery;
    JSONObject jsonobject;
    private static String url_visitor = "http://10.0.2.2/portal/fetchvisit.php";
    JSONParser jParser = new JSONParser();
    JSONArray ownerObj, jsonarray;

    ArrayList<HashMap<String, String>> arraylist;
    ArrayList<String> v_username = new ArrayList<String>();
    ArrayList<String> v_parties1 = new ArrayList<String>();
    ArrayList<String> v_date = new ArrayList<String>();
    String suid, uid, wt_wod_code1, wt_party1;
    View view;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_home, container, false);
        getActivity().setTitle("Home");
        cardviewvisit = (CardView) view.findViewById(R.id.cardviewvisit);
        cardvieworder = (CardView) view.findViewById(R.id.cardvieworder);
        cardviewpayment = (CardView) view.findViewById(R.id.cardviewpayment);
        cardviewdelivery = (CardView) view.findViewById(R.id.cardviewdelivery);
        session = new SessionManager(getActivity());
        HashMap<String, String> user = session.getUserDetails();
        uid = user.get(SessionManager.KEY_ID);
        visit = (TextView) view.findViewById(R.id.visit1);
        cardviewvisit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Fragment fragment = new DeliveryTab();
                FragmentManager fragmentManager = getFragmentManager();
                fragmentManager.beginTransaction().replace(R.id.framelayout, fragment).commit();

            }
        });

        new DownloadJSON().execute();
        return view;
    }


    private class DownloadJSON extends AsyncTask<Void, Void, Void> {

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

            // Create an array
            try {
                arraylist = new ArrayList<HashMap<String, String>>();

                List<NameValuePair> params = new ArrayList<NameValuePair>();
                params.add(new BasicNameValuePair("v_username", uid));

                JSONObject json = jParser.makeHttpRequest(url_visitor, "GET", params);

                    ownerObj = json.getJSONArray("visit");
                    for (int i = 0; i < ownerObj.length(); i++) {
                        jsonobject = ownerObj.getJSONObject(i);
                      v_parties1.add(jsonobject.getString("visit"));
                    }
            } catch (Exception e) {
            }

            return null;
        }
        @Override
        protected void onPostExecute(Void args) {
            visit.setText("v_parties1");
        }
    }
}

这是我的 api:-

  <?php

     //here i posted the query
       $count = "100";
if ($count > 0) {       
            $response["visit"] = array();
            $visit["todayvisit"]=$count;
            // push single product into final response array
            array_push($response["visit"], $visit);
            $response["success"] = 1;
            echo json_encode($response);            else 
            {
            $response["success"] = 0;
            $response["message"] = "No Visit found";
            // echo no users JSON
            echo json_encode($response);
        }


    ?>

这里是浏览器中的输出:-

  {"visit":[{"todayvisit":2}],"success":1}

输出总是在方括号 [] 中。请帮帮我。

【问题讨论】:

  • 那些括号“[]”表示你有数组 od 元素,而不是一个元素..
  • 你检查 JSON 数据了吗?可能是字符串在 JSON 文件中包含那个“[]”?

标签: php android mysql json


【解决方案1】:

没有

array_push($response["visit"], $visit);

但是:

$response["visit"] = $visit;

【讨论】:

  • 在浏览器中,括号消失了,但是当我在 android 中运行相同的程序时,只有括号不显示值。
【解决方案2】:

仅适用于该代码

$count = "100";
    if ($count > 0) {       
                $response = array();
                $visit["todayvisit"]=$count;
                // push single product into final response array
                $response["visit"]  = $visit;
                //array_push($response, $visit);
                $response["success"] = 1;
                echo json_encode($response); 
                }           
                else 
                {
                $response["success"] = 0;
                $response["message"] = "No Visit found";
                // echo no users JSON
                echo json_encode($response);
            }

【讨论】:

    【解决方案3】:

    如下所示更新您的代码-

    $response = array( #Initialize the response array
        'visit'=>array(
            'todayvisit'=>0
        ),
        'success'=>0,
        'message'=>'No Visit found'
    );
    
    $count = "100"; #Assign your visited/query data here
    
    if ($count > 0) {       
        $response['visit']['todayvisit'] = $count;
        $response["success"] = 1;
        $response["message"] = "Visit found";
    }
    
    echo json_encode($response);
    

    输出(如果已访问)

    {"visit":{"todayvisit":"100"},"success":1,"message":"Visit found"} 
    

    输出(如果未访问)

    {"visit":{"todayvisit":0},"success":0,"message":"No Visit found"} 
    

    注意:如果未找到访问,现在您的代码将返回默认的JSON 数据。所以,不需要检查else 条件

    另一个答案

    如果您只想要20 之类的值。则无需制作JSON 格式。从您的 PHP 代码中使用,如下所示-

    $count = '100'; #query from Database and assign visited count
    echo $count;
    

    在您的 android 代码中,GET 字符串数据。无需使用 json 解析器。 仅GET 字符串。

    【讨论】:

    • 括号不见了,但android中没有
    • 你想和 {"visit":[{"todayvisit":2}],"success":1} 格式一样吗? @user6880336
    • 请更新您的问题。您想要哪种 JSON 格式。 @user6880336
    • 我只想要一个值
    • 好的,请稍等@user6880336
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 2012-12-15
    • 2021-07-20
    相关资源
    最近更新 更多