我需要将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文件中,您将响应发送为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");