【问题标题】:passing array to php from android fails on android 4.1 but succeeds on android 5+从 android 向 php 传递数组在 android 4.1 上失败,但在 android 5+ 上成功
【发布时间】:2015-10-21 19:53:46
【问题描述】:

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

这就是我填充 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 编译是否不同?

【问题讨论】:

  • trying to pass an array into the php page。什么样的阵列?你可以先解释一下你的代码。同时显示你的 php 脚本。
  • 我已经编辑了代码,希望我的意思更清楚
  • 你仍然没有告诉什么/在哪里不起作用。
  • 刚刚编辑了我的问题以包含我找到的结果。希望它现在可以解决问题
  • 如果您希望这需要更多时间,您应该继续提供不重要的信息。你用jsArray.toString()); 发送什么和两个安卓?那么你在 php 脚本中收到了什么?

标签: php android mysql arrays


【解决方案1】:

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

我所做的修复它是下载 gson 库,将其导入我的项目并使用以下代码

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

而不是

myarray.toString();

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

【讨论】:

    猜你喜欢
    • 2014-02-05
    • 2018-04-11
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 2019-08-12
    相关资源
    最近更新 更多