php - 将数组从 android 传递到 php 在 android 4.1 上失败,但在 android 5+ 上成功

标签 php android mysql arrays

注意:下面的代码与我的 Galaxy s5 和 Android 5.0 完美配合,但在使用我的 Galaxy s3 和 Android 4.1 时似乎总是无法保存。我的应用程序的所有其他部分在两部手机上都运行良好。

这就是我填充 JSArray 的方式,所有数据都经过检查并且全部有效,没有空值。

 int i = 0;
                while (i<StudentIDzArray.length)
                {
                    //InsertMarks(getApplicationContext(), StudentIDzArray[i], SubjectID, SubjectName, StudentMarksArrayTemp[i], ClassID, ClassName, ExamNumber, StudentsArray[i]);
                    String SingleStudentInfo[] = {StudentIDzArray[i], SubjectID, SubjectName, StudentMarksArrayTemp[i], ClassID, ClassName, ExamNumber, StudentsArray[i]};
                    AllStudentInfo.add(SingleStudentInfo);
                    i++;
                }

                jsArray = new JSONArray(AllStudentInfo);

将json数组定义为全局变量

JSONArray jsArray;

使用此函数使用Volley Library将数据保存到mysql数据库

 public void InsertMarks(final Context context)
    {
        RequestQueue queue = Volley.newRequestQueue(context);
        StringRequest sr = new StringRequest(Request.Method.POST,SaveUrl, new Response.Listener<String>() {
            @Override
            public void onResponse(String response)
            {
                if(response.equals("success"))
                {
                    Toast.makeText(context,"Success added " ,Toast.LENGTH_LONG).show();
                }
                else
                {
                    Toast.makeText(context, "Failure to add"+  response,Toast.LENGTH_LONG).show();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error)
            {
                Toast.makeText(context,"connection error",Toast.LENGTH_LONG).show();
            }
        }){
            @Override
            protected Map<String,String> getParams()
            {
                Map<String,String> params = new HashMap<String, String>();
                params.put("StudentsData",jsArray.toString());

                return params;
            }

            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String,String> params = new HashMap<String, String>();
                params.put("Content-Type","application/x-www-form-urlencoded");
                return params;
            }
        };
        queue.add(sr);
    }

这是读取数组并获取所有值以便保存到 mysql 的 php 代码。

$AllStudentsData =$_POST['StudentsData'];
$AllObj = json_decode($AllStudentsData);

// Create connection
$con=mysqli_connect("****","*****","********","*****") or die ( mysqli_error($MySQL_Handle) ); 

$sSQL= 'SET CHARACTER SET utf8'; 
mysqli_query($con,$sSQL) or die ('Can\'t charset in DataBase'); 

mysql_query("SET NAMES utf8;");
mysql_query("SET CHARACTER_SET utf8;");

$ww = 0;

while ($ww < count($AllObj))
{
$StudentID = $AllObj[$ww][0];
$SubjectID = $AllObj[$ww][1];
$SubjectName = $AllObj[$ww][2];
$Mark = $AllObj[$ww][3];
$ClassNo = $AllObj[$ww][4];
$ClassName = $AllObj[$ww][5];
$Exam_ID = $AllObj[$ww][6];
$StudentFullName = $AllObj[$ww][7];

if($Exam_ID=="0")
{
$result1 = mysql_query("select * from  Student_Marks where Student_No='$StudentID' AND Subject_No='$SubjectID'");

if(mysql_num_rows($result1)>0)
{
$result = mysql_query("update Student_Marks SET 
S1_Mark_1A ='$Mark'
where Student_No='$StudentID' AND Subject_No='$SubjectID' AND ClassID='$ClassNo' ");
}
else
{
$result = mysql_query("INSERT INTO Student_Marks (Student_No,StudentFullName,Subject_No,Subject_Name,S1_Mark_1A,ClassID,ClassName) 
VALUES
('".$StudentID."','".$StudentFullName."','".$SubjectID."','".$SubjectName."','".$Mark."','".$ClassNo."','".$ClassName."')");
}
}

在尝试找出问题所在和位置之后,在 android 4 上使用 JSONArray.toString 时,数据似乎变得垃圾,而在 android 5 上则保持良好。

params.put("StudentsData",jsArray.toString());

此代码在 android 5 和 android 4 上的 java 上的编译是否不同?

最佳答案

似乎 .toString 在 android 5.0 上得到了正确的结果...但是在 android 4+ 上,它使数组变得困惑,不知道为什么。

我修复它的方法是下载 gson 库,将其导入到我的项目中并使用以下代码

Gson gson = new Gson();
gson.tojson(myarray);

而不是

myarray.toString();

然后该应用程序在该应用程序支持的所有 Android 版本(Android 4+)上运行良好。

关于php - 将数组从 android 传递到 php 在 android 4.1 上失败,但在 android 5+ 上成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33268062/

相关文章:

php - mysqli_free_result 有必要吗?

PHP 比较 DateTime 与当前时间

mysql - 为什么在 mySQL 中转义双引号不返回结果?

mysql - cakephp 加入选择框

java - 验证该行在 mySQL 表中是否不可用

php - 在 PHP < 5.4 中,有什么方法可以获取您刚刚设置的状态响应代码?

php - 在 PHP 前端使用 grunt

java - 从同一个应用程序(Flavors)安装两个调试 apk

android - getInstallerPackageName(String) : String? ' 已弃用。在 Java 中已弃用

android - 使用phonegap在eclipse for android中SQLite数据库的位置