JSONException:java.lang.String类型的值EXECUTARRAY':id'=>$id':project\u id'=>$project\u id;to$st=$con->prepare'INSERT INTO task ID,Project_ID value:ID,:Project_ID';$success=$st->executearray':id'=>$id',:project\u id'=>$project\u id;。您好@meda,在我更改$success=$con->executearray':id'=>$id':project\u id'=>$project\u id之后,您的代码工作得很好;to$st=$con->prepare'INSERT INTO task ID,Project_ID value:ID,:Project_ID'$success=$st->executearray':id'=>$id',:project\u id'=>$project\u id;。当我设法获得返回结果[{code:1,msg:INSERT successful}。但我面临一个新问题,它声明**无法在未调用Looper.prepare的线程内创建处理程序。有什么建议吗?@user3776060这是因为您试图在运行的线程中显示toast,它应该在主线程UI上,但我建议您使用asyntask作为高级解决方案 nameValuePairs.add(new BasicNameValuePair("id",id)); $data = array(); if(isset($_POST['id'], $_POST['Project_Id']){ $id=$_POST['id']; $project_id=$_POST['Project_Id']; $uname='root'; $pwd=''; $con = new PDO("mysql:host=192.168.0.111;dbname=wktask", $uname, $pwd); $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); $stmt = $con->prepare('INSERT INTO task (`ID`, `Project_Id`) values(:id, :project_id)')) $success = $stmt->execute(array(':id'=>$id, ':project_id'=>$project_id)); if($success){ $data['code'] = 1; $data['msg'] = 'INSERT successful'; }else{ $data['code'] = 0; $data['msg'] = 'INSERT Failed'; } }else{ $data['code'] = 0; $data['msg'] = 'values are not set'; } echo(json_encode($data));
我努力寻找解决办法,但还是没能解决。请帮忙。下面是我的java代码:-JSONException:java.lang.String类型的值EXECUTARRAY':id'=>$id':project\u id'=>$project\u id;to$st=$con->prepare'INSERT INTO task ID,Project_ID value:ID,:Project_ID';$success=$st->executearray':id'=>$id',:project\u id'=>$project\u id;。您好@meda,在我更改$success=$con->executearray':id'=>$id':project\u id'=>$project\u id之后,您的代码工作得很好;to$st=$con->prepare'INSERT INTO task ID,Project_ID value:ID,:Project_ID'$success=$st->executearray':id'=>$id',:project\u id'=>$project\u id;。当我设法获得返回结果[{code:1,msg:INSERT successful}。但我面临一个新问题,它声明**无法在未调用Looper.prepare的线程内创建处理程序。有什么建议吗?@user3776060这是因为您试图在运行的线程中显示toast,它应该在主线程UI上,但我建议您使用asyntask作为高级解决方案 nameValuePairs.add(new BasicNameValuePair("id",id)); $data = array(); if(isset($_POST['id'], $_POST['Project_Id']){ $id=$_POST['id']; $project_id=$_POST['Project_Id']; $uname='root'; $pwd=''; $con = new PDO("mysql:host=192.168.0.111;dbname=wktask", $uname, $pwd); $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); $stmt = $con->prepare('INSERT INTO task (`ID`, `Project_Id`) values(:id, :project_id)')) $success = $stmt->execute(array(':id'=>$id, ':project_id'=>$project_id)); if($success){ $data['code'] = 1; $data['msg'] = 'INSERT successful'; }else{ $data['code'] = 0; $data['msg'] = 'INSERT Failed'; } }else{ $data['code'] = 0; $data['msg'] = 'values are not set'; } echo(json_encode($data));,java,php,json,pdo,Java,Php,Json,Pdo,我努力寻找解决办法,但还是没能解决。请帮忙。下面是我的java代码:- public class MainActivity extends Activity { String project_id; String id; InputStream is=null; String result=null; String line=null; int code = 0; public void onCreate(Bundle savedInstanceState) { super.onCre
public class MainActivity extends Activity {
String project_id;
String id;
InputStream is=null;
String result=null;
String line=null;
int code = 0;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText e_id =(EditText) findViewById(R.id.editText1);
final EditText e_prjId =(EditText) findViewById(R.id.editText2);
Button insert =(Button) findViewById(R.id.button1);
id = e_id.getText().toString();
project_id = e_prjId.getText().toString();
insert.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
insert();
}
});
}
public void insert() {
final ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("id",id));
nameValuePairs.add(new BasicNameValuePair("Project_Id",project_id));
new Thread(new Runnable() {
public void run() {
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://192.168.0.111/insert.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
Log.e("pass 1", "connection success ");
}
catch(Exception e){
Log.e("Fail 1", e.toString());
Toast.makeText(getApplicationContext(), "Invalid IP Address",
Toast.LENGTH_LONG).show();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
while ((line = reader.readLine()) != null){
sb.append(line + "\n");
}
is.close();
result = sb.toString();
Log.e("pass 2", "connection success ");
}
catch(Exception e){
Log.e("Fail 2", e.toString());
}
try {
Log.i("tagconvertstr", "["+result+"]");
JSONObject json_data = new JSONObject(result);
code=(json_data.getInt("code"));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(code==1)
{
Toast.makeText(getBaseContext(), "Inserted Successfully",Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(getBaseContext(), "Sorry, Try Again",Toast.LENGTH_LONG).show();
}
}
}).start();
}
php:-
我真的不知道是什么原因让我一直从JSON异常错误接收错误消息。真的很感激有人能帮我
谢谢小心,PHP关联数组区分大小写 您正在发送id: 它不等于ID 除了这个错误,您没有检查php脚本中的数据,我为您重写了它:
$data = array();
if(isset($_POST['id'], $_POST['Project_Id']){
$id=$_POST['id'];
$project_id=$_POST['Project_Id'];
$uname='root';
$pwd='';
$con = new PDO("mysql:host=192.168.0.111;dbname=wktask", $uname, $pwd);
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$stmt = $con->prepare('INSERT INTO task (`ID`, `Project_Id`) values(:id, :project_id)'))
$success = $stmt->execute(array(':id'=>$id, ':project_id'=>$project_id));
if($success){
$data['code'] = 1;
$data['msg'] = 'INSERT successful';
}else{
$data['code'] = 0;
$data['msg'] = 'INSERT Failed';
}
}else{
$data['code'] = 0;
$data['msg'] = 'values are not set';
}
echo(json_encode($data));
原因是:您试图将html字符串强制转换为JSONObject。所以你的变量结果很可能不是有效的json格式。那么@user3776060你试过我下面的答案了吗?嗨@dognose,谢谢你的评论,你是对的。我可以知道如何使结果返回有效的json格式值吗?您好@meda,非常感谢您的评论和回答。我尝试了它,但它返回了一个错误msg stated致命错误:调用未定义的方法PDO::execute。有什么建议吗?嗨@meda,在我更改$success=$con->EXECUTARRAY':id'=>$id':project\u id'=>$project\u id;to$st=$con->prepare'INSERT INTO task ID,Project_ID value:ID,:Project_ID';$success=$st->executearray':id'=>$id',:project\u id'=>$project\u id;。您好@meda,在我更改$success=$con->executearray':id'=>$id':project\u id'=>$project\u id之后,您的代码工作得很好;to$st=$con->prepare'INSERT INTO task ID,Project_ID value:ID,:Project_ID'$success=$st->executearray':id'=>$id',:project\u id'=>$project\u id;。当我设法获得返回结果[{code:1,msg:INSERT successful}。但我面临一个新问题,它声明**无法在未调用Looper.prepare的线程内创建处理程序。有什么建议吗?@user3776060这是因为您试图在运行的线程中显示toast,它应该在主线程UI上,但我建议您使用asyntask作为高级解决方案
nameValuePairs.add(new BasicNameValuePair("id",id));
$data = array();
if(isset($_POST['id'], $_POST['Project_Id']){
$id=$_POST['id'];
$project_id=$_POST['Project_Id'];
$uname='root';
$pwd='';
$con = new PDO("mysql:host=192.168.0.111;dbname=wktask", $uname, $pwd);
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$stmt = $con->prepare('INSERT INTO task (`ID`, `Project_Id`) values(:id, :project_id)'))
$success = $stmt->execute(array(':id'=>$id, ':project_id'=>$project_id));
if($success){
$data['code'] = 1;
$data['msg'] = 'INSERT successful';
}else{
$data['code'] = 0;
$data['msg'] = 'INSERT Failed';
}
}else{
$data['code'] = 0;
$data['msg'] = 'values are not set';
}
echo(json_encode($data));