【发布时间】: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 脚本中收到了什么?