gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 21:54:51 27 4
gpt4 key购买 nike

注意:下面的代码与我的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com