如何使用json从php文件发送整数值到android活动?

问题描述 投票:1回答:1

我需要将PHP文件中的整数值发送到android活动,但它显示异常错误。

那是,

org.json.JSONARRAY类型的user_data上的异常值[“,null,null]无法转换为JSONObject。

有人帮我请。

这是我输出的错误。

我的PHP代码将从数据库中获取日期并分成单独的日,月,年。这里的过程运行正常,但无法将那一天,一个月,一年发送到android活动。

       <?php 
error_reporting(0);
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'];


    $ids=$row;
     $q = "SELECT `ScheduleDate` FROM user_info WHERE id ='" . $user_id . "'";


        $result = $con->query($q);
        $rows = $result->fetch_assoc();
          $date=$rows["ScheduleDate"];


 list($year,$month,$day) = split("-",$date);

 $response = array( $year , $month ,$day );

  //echo $year;
   //echo $month;
   //echo $day;


//$response = array("year"=>"$year","month"=>"$month","day"=>"$day");



}

//if(!$response==null)
 // {

    //  echo "Matches";

 // }
  //else
  //{
      // echo "No match";
  //}

 echo json_encode(array("user_data"=> $response));


?>

这是我的数据库结构。

完整的Android代码主要活动,主页活动

主要活动

      package com.example.text;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
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 MainActivity extends AppCompatActivity {

    EditText name, password;
    String Name, Password;
    Context ctx=this;

    String year,month,day;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        name = (EditText) findViewById(R.id.main_name);
        password = (EditText) findViewById(R.id.main_password);
    }

    public void main_register(View v){
        //startActivity(new Intent(this,Register.class));
    }

    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;

            try {
                URL url = new URL("http://www.powersys-india.com/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 s) {
            String err=null;
            try {

               /* if(s.equals("Matches")) {

                    Toast.makeText(MainActivity.this, "has a value", Toast.LENGTH_LONG).show();
                }

                if(s.equals("No match")) {

                    Toast.makeText(MainActivity.this, "no value", Toast.LENGTH_LONG).show();
                }*/


                JSONObject jsonObject = new JSONObject(s);
                JSONArray jsonArray = jsonObject.getJSONArray("user_data");  //Parse array from json object



                for(int i=0;i<jsonArray.length();i++)
                {
                    JSONObject curr = jsonArray.getJSONObject(i);

                      year = curr.getString("year");
                      month = curr.getString("year");
                      day = curr.getString("day");

                    //Do stuff with the month day String here
                }


            } catch (JSONException e) {
                e.printStackTrace();
                err = "Exception: "+e.getMessage();
            }

            Intent i = new Intent(ctx, Home.class);
            i.putExtra("year", year);
            i.putExtra("month", month);
            i.putExtra("day", day);
            i.putExtra("err", err);
            startActivity(i);

        }
    }

}

家庭活动

 package com.example.text;


import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class Home extends AppCompatActivity {

    String day, month, year, Err;
    TextView nameTV, emailTV, passwordTV, err;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        nameTV = (TextView) findViewById(R.id.home_name);
        emailTV = (TextView) findViewById(R.id.home_email);
        passwordTV = (TextView) findViewById(R.id.home_password);
        err = (TextView) findViewById(R.id.err);

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





        nameTV.setText("YEAR "+year);
        passwordTV.setText("MONTH "+month);
        emailTV.setText("DATE "+day);
        err.setText(Err);
    }
}
php android mysql
1个回答
0
投票

在Php文件中,您将响应发送为JsonArray.So将响应字符串转换为JSONArray和Parse

使用

JSONObject jsonObject = new JSONObject(s);
JSONArray jsonArray = jsonObject.getJSONArray("user_data");  //Parse array from json object

for(int i=0;i<jsonArray.length();i++)
 {
 JSONObject curr = jsonArray.getJSONObject(i);

 String year = curr.getString("year")


 //Do stuff with the month day String here
 }

代替

 JSONObject root = new JSONObject(s);
 JSONObject user_data = root.getJSONObject("user_data");
© www.soinside.com 2019 - 2024. All rights reserved.