【问题标题】:How to receive the multiple rows of json object from php in android activity?如何在android活动中从php接收多行json对象?
【发布时间】:2017-12-29 07:05:39
【问题描述】:

这是我的 json

 {"user_data":[{"year":"2017","month":"12","day":"12","StartTime":"2:00 am","Endtime":"4:00 am","Hours":"02:00:00"},{"year":"2018","month":"12","day":"10","StartTime":"5:00 am","Endtime":"7:00 am","Hours":"02:00:00"}]}

我使用 fetch.php 代码收到的 json 对象

    <?php
require "init.php";

   //$name = $_POST["name"];
  // $password = $_POST["password"];

 $name = "surya";
  $password = "1995";

        $Sql = "SELECT * FROM `user_info` 
        WHERE `name`='".$name."' AND 
        `password`='".$password."';";

    $result = mysqli_query($con, $Sql);
    $retrive = array();

    while($row = mysqli_fetch_array($result))
{
        $user_id =  $row['id']; 
        $sql = "SELECT id, ScheduleDate, StartTime,Endtime, Hours,Employeeid 
        FROM empdet WHERE Employeeid ='".$user_id."' ";
        $result = $con->query($sql);

        if ($result->num_rows > 0) 
    {
        // output data of each row
        while($row = $result->fetch_assoc()) 
        {
            $id=$row["id"]. 
            $date=$row["ScheduleDate"]; 
            $start=$row["StartTime"]; 
            $end=$row["Endtime"];
            $hour=$row["Hours"];
            $Employeeid=$row["Employeeid"];
            list($year,$month,$day) = split("-",$date);
            $data[] = array("year"=>$year,
                            "month"=>$month,
                            "day"=>$day,
                            "StartTime"=>$start,
                            "Endtime"=>$end,
                            "Hours"=>$hour );   
        }$response = $data;
    } else 
        {
            echo "0 results";
        }
}
echo json_encode(array("user_data"=> $response)); 
?>

我的问题是如何在 android 活动中接收多行 json 对象, 首先我尝试接收它工作的一行,但是当我尝试设置循环时它在 android 活动中不起作用,而且我需要将多行发送到下一个活动。我尝试了不同的方式,但我找不到它如何设置循环。

1.如何从php文件中接收多行json对象数据 2.如何设置循环以一一发送多行 3.如何在下一个活动中使用循环接收它们 请任何人帮我做!

这是我的安卓代码! 不活动

        package com.example.myapplication;

    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.AsyncTask;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.Toast;

    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;


    public class Login extends Activity
    {
        EditText name, password;
        String NAME=null, PASSWORD=null, EMAIL=null;
        String Name, Password;
        Context ctx=this;
        String year,month,day,StartTime,Endtime,Hours;
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);
            name = (EditText) findViewById(R.id.main_name);
            password = (EditText) findViewById(R.id.main_password);
        }
        public void main_login(View v)
        {
            Name = name.getText().toString();
            Password = password.getText().toString();
            BackGround b = new BackGround();
            b.execute(Name, Password);
        }

        class BackGround extends AsyncTask<String, String, String>
        {
            @Override
            protected String doInBackground(String... params)
            {
                String name = params[0];
                String password = params[1];
                String data="";
                int tmp;
               // creating the connection with localhost
                try {
                    URL url = new URL("http://localhost/sample/loo/login.php");
                    String urlParams = "name="+name+"&password="+password;
                    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                    httpURLConnection.setDoOutput(true);
                    OutputStream os = httpURLConnection.getOutputStream();
                    os.write(urlParams.getBytes());
                    os.flush();
                    os.close();
                    InputStream is = httpURLConnection.getInputStream();
                    while((tmp=is.read())!=-1)
                    {
                        data+= (char)tmp;
                    }
                    is.close();
                    httpURLConnection.disconnect();
                    return data;
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                    return "Exception: "+e.getMessage();
                } catch (IOException e) {
                    e.printStackTrace();
                    return "Exception: "+e.getMessage();
                }
            }
            @Override
            protected void onPostExecute(String result)
            {
                String err=null;
                //fetching thte data from database using php/json

                for (int j = 0; j < result.length(); j++) {

                    try
                    {

                        JSONObject root = new JSONObject(result);

                        boolean error = root.getBoolean("error");

                        if (!error) {

                            JSONObject user_data = root.getJSONObject("user_data");
                            year  = user_data.getString("year");
                            month  = user_data.getString("month");
                            day  = user_data.getString("day");
                            StartTime  = user_data.getString("StartTime");
                            Endtime  = user_data.getString("Endtime");
                            Hours  = user_data.getString("Hours");

                        }

                    } catch (JSONException e)
                    {
                        e.printStackTrace();
                        err = "Exception: "+e.getMessage();
                    }        }
                //passing the value to calender activity
  Intent i = new Intent(ctx, Calender.class);
                            i.putExtra("year", year);
                            i.putExtra("month", month);
                            i.putExtra("day", day);
                            i.putExtra("StartTime", StartTime);
                            i.putExtra("Endtime", Endtime);
                            i.putExtra("Hours", Hours);
                            i.putExtra("err", err);
                            startActivity(i);

                if(result==null)
                {
                 Toast.makeText(Login.this, "result is null", Toast.LENGTH_LONG).show();
                }
                //else {
                //   Intent i = new Intent(ctx, Main2Activity.class);
                //  startActivity(i);
                //  Toast.makeText(MainActivity.this, "has a value", Toast.LENGTH_LONG).show();
                // }

            }
        }
    }

这是我的第二个活动

    package com.example.myapplication;
import android.Manifest;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.CalendarContract;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class Calender extends AppCompatActivity
{
    String day, month, year,Hours,Endtime,StartTime, Err,Shours,Sminutes,Ssecond,Ehours,Eminutes,Esecond,Eampm,Sampm;
    int s,mo;
    public static final int MY_PERMISSIONS_REQUEST_WRITE_CALENDAR = 123;
    Context context;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_calender);
        context = Calender.this;
        writeCalendarEvent();

    }
    private void writeCalendarEvent()
    {

        year = getIntent().getStringExtra("year");
        month = getIntent().getStringExtra("month");
        day = getIntent().getStringExtra("day");
        StartTime = getIntent().getStringExtra("StartTime");
        Endtime = getIntent().getStringExtra("Endtime");
        Hours = getIntent().getStringExtra("Hours");
        Err = getIntent().getStringExtra("err");

}
}

【问题讨论】:

  • 我一直想知道为什么人们给我们提供文本输出的截图?你可以复制粘贴...
  • s,我处于迷茫状态,我忘了我能做到!
  • 请粘贴您的 `JSON' 字符串而不是短屏幕
  • @Shailesh 我已编辑!
  • 检查我的答案

标签: php android json android-intent


【解决方案1】:

试试这个

try
{
        JSONObject root = new JSONObject(result);

        JSONArray user_data = root.getJSONArray("user_data");

        for (int i = 0; i < user_data.length(); i++) {

            JSONObject jsonObject = user_data.getJSONObject(i);

            year  = jsonObject.getString("year");
            month  = jsonObject.getString("month");
            day  = jsonObject.getString("day");
            StartTime  = jsonObject.getString("StartTime");
            Endtime  = jsonObject.getString("Endtime");
            Hours  = jsonObject.getString("Hours");


        }
} 
catch (JSONException e) 
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}

【讨论】:

  • 这段代码正在运行,但是当我尝试将它们放入 toast 时,它会显示第二行详细信息,但我需要所有行,并使用意图将它们发送到下一个活动。有什么方法可以这样做?
  • @selvasurya 是的,您可以在 intent.putextra 中传递此数据并轻松获取下一个活动。如果您有任何面部问题,请告诉我。
【解决方案2】:

从 json 截图你的user_data 不是JSONObject 实际上这是JSONArray 所以检查下面的代码

  JASONArray jsonArray = root.getJSONArray("user_data");
  JSONObject user_data = jsonArray.getJSONObject(0);
  year  = user_data.getString("year");
  month  = user_data.getString("month");
  day  = user_data.getString("day");
  StartTime  = user_data.getString("StartTime");
  Endtime  = user_data.getString("Endtime");
  Hours  = user_data.getString("Hours");

【讨论】:

    【解决方案3】:

    试试这个:

    JSONArray jArr = root.getJSONArray("user_data");
    int arrLen = jArr.length();
    if(arrLen != 0)
        {
            for (int i = 0; i < arrLen; i++) 
            {
            JSONObject obj = (JSONObject) jArr.get(i);
            year  = obj.getString("year");
            month  = obj.getString("month");
            day  = obj.getString("day");
            StartTime  = obj.getString("StartTime");
            Endtime  = obj.getString("Endtime");
            Hours  = obj.getString("Hours");
            }
        }
    

    【讨论】:

      【解决方案4】:

      试试这个代码。这只是为了将数据从一个活动发送到另一个活动而进行解析,您需要将该数据存储到数组中,然后在 Intent 上发送并将该数据接收到另一个活动。

      try
              {
                  JSONObject jsonObject = new JSONObject(result);
                  JSONArray userData = jsonObject.getJSONArray("user_data");
      
                  if (userData != null)
                  {
                      for (int j = 0; j < userData.length(); j++) {
      
                          JSONObject user_data = userData.getJSONObject(j);
                          year = user_data.getString("year");
                          month = user_data.getString("month");
                          day = user_data.getString("day");
                          StartTime = user_data.getString("StartTime");
                          Endtime = user_data.getString("Endtime");
                          Hours = user_data.getString("Hours");
                          // here store this String value in one array and pass that array in Intent
                      }
                  }
      
                  //like your array name is UserData then you can do like this 
                  // but make sure if you use List with Model then make it 
                  //Serializable or Parcelable
                  if (UserData != null)
                  {
                      Intent i = new Intent(ctx, Main2Activity.class);
                      i.putExtra("userData", UserData);
                      startActivity(i);
                  }
                  else{
                    // data is null or something wrong
                  }
              }
              catch (Exception e) {
                  e.printStackTrace();
              }
      

      【讨论】:

      • 先生,我这里有dout,db中有两行,所以for循环将执行2次正确!,当for循环执行它的第一个循环时,它会发送缩进中第一个循环的数据,在执行第二次循环之后,缩进将发送第二个循环的数据?这意味着一行接一行?
      • for循环执行两次,缩进两次,分别发送两行
      • 如果你为每一行开始一个活动,你最终会得到两个活动。这看起来不太好。
      • 你最好用intent.putExtra("result", result);将整个json文本发送到活动中
      【解决方案5】:

      试试这个,希望它会工作

      JSONObject jsonObject = new JSONObject(result);
              String user = jsonObject.getString("user_data");
              JSONArray jsonArray = new JSONArray(user);
              for(int j =0 ; j<jsonArray.length() ; j++) {
                  JSONObject json = jsonArray.getJSONObject(j);
                  String year = json.getString("year");
                  String month = json.getString("month");
                  String day = json.getString("day"):
      
      
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-19
        • 2015-06-19
        • 2012-04-30
        • 1970-01-01
        • 1970-01-01
        • 2018-12-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多