0
我对android编程比较陌生,而且我一直在面对这个问题。我目前正在开发Android与Arduino的接口以及使用应用程序控制设备。我在Front End的这一部分遇到了一个问题,那里有交换机,它会发送带有一些字符串作为参数的POST请求。但我不断收到这个错误。我首先搜索了互联网寻找答案,但似乎没有人将异常抛出为“价值引脚类型”。前端java和PHP的代码发布如下。感谢您的帮助。解析数据时出错org.json.JSONException:类型java.lang.String的值Pin无法转换为JSONObject
changeState.php
<?php
//load and connect to MySQL database stuff
require("config.php");
if (!empty($_POST)) {
$status = $_POST['status'];
//initial query
$query = "INSERT INTO status (leaf_id, state) VALUES (:pinNumber, :pinState) ";
//Update query
$stageOne = explode(',',$status);
for($i=0;$i<sizeof($stageOne);$i++) {
$pinNumber=$pinState="0";
$stageTwo = explode('-',$stageOne[$i]);
$pinNumber = $stageTwo[0];
$pinState = $stageTwo[1];
echo "Pin number : ".$pinNumber."</br>";
echo "Pin state : ".$pinState."</br>";
//execute query
$query_params = array(
':pinNumber' => $pinNumber,
':pinState' => $pinState
);
try {
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch (PDOException $ex) {
// For testing, you could use a die and message.
die("Failed to run query: " . $ex->getMessage());
//or just use this use this one:
$response["success"] = 0;
$response["message"] = "Database Error. Couldn't add post!";
die(json_encode($response));
}
}
$response["success"] = 1;
$response["message"] = "State Change Successfully Added!";
echo json_encode($response);
} else {
?>
<h1>Waiting for user Interation</h1>
<form action="changeState.php" method="post">
Status:<br />
<input type="text" name="status" placeholder="Change status" />
<br /><br />
</form>
<?php
}
?>
controlFrontEnd.java
package com.thulung.bathiama;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.Toast;
public class controlFrontEnd extends Activity implements OnClickListener{
boolean outlet1_status = false;
boolean outlet2_status = false;
boolean outlet3_status = false;
boolean outlet4_status = false;
boolean outlet5_status = false;
boolean outlet6_status = false;
private ImageView outlet1;
private ImageView outlet2;
private ImageView outlet3;
private ImageView outlet4;
private ImageView outlet5;
private ImageView outlet6;
private static final String TAG_SUCCESS = "success";
private static final String TAG_MESSAGE = "message";
private static final String STATECHANGE_URL = "http://192.168.1.102/Test/BathiAma/bathiama/changeState.php";
private ProgressDialog pDialog;
private JSONParser jsonParser = new JSONParser();
String DebugOutletMessage = new String("Status Message");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.buttons);
outlet1 = (ImageView)findViewById(R.id.outlet1);
outlet2 = (ImageView)findViewById(R.id.outlet2);
outlet3 = (ImageView)findViewById(R.id.outlet3);
outlet4 = (ImageView)findViewById(R.id.outlet4);
outlet5 = (ImageView)findViewById(R.id.outlet5);
outlet6 = (ImageView)findViewById(R.id.outlet6);
outlet1.setOnClickListener(this);
outlet2.setOnClickListener(this);
outlet3.setOnClickListener(this);
outlet4.setOnClickListener(this);
outlet5.setOnClickListener(this);
outlet6.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.outlet1:
if(!outlet1_status)
outlet1.setImageResource(R.drawable.on);
else
outlet1.setImageResource(R.drawable.off);
outlet1_status=!outlet1_status;
break;
case R.id.outlet2:
//Toast.makeText(getApplicationContext(), "Outlet 2 pressed", Toast.LENGTH_LONG).show();
if(!outlet2_status)
outlet2.setImageResource(R.drawable.on);
else
outlet2.setImageResource(R.drawable.off);
outlet2_status=!outlet2_status;
break;
case R.id.outlet3:
//Toast.makeText(getApplicationContext(), "Outlet 3 pressed", Toast.LENGTH_LONG).show();
if(!outlet3_status)
outlet3.setImageResource(R.drawable.on);
else
outlet3.setImageResource(R.drawable.off);
outlet3_status=!outlet3_status;
break;
case R.id.outlet4:
//Toast.makeText(getApplicationContext(), "Outlet 4 pressed", Toast.LENGTH_LONG).show();
if(!outlet4_status)
outlet4.setImageResource(R.drawable.on);
else
outlet4.setImageResource(R.drawable.off);
outlet4_status=!outlet4_status;
break;
case R.id.outlet5:
//Toast.makeText(getApplicationContext(), "Outlet 5 pressed", Toast.LENGTH_LONG).show();
if(!outlet5_status)
outlet5.setImageResource(R.drawable.on);
else
outlet5.setImageResource(R.drawable.off);
outlet5_status=!outlet5_status;
break;
case R.id.outlet6:
//Toast.makeText(getApplicationContext(), "Outlet 6 pressed", Toast.LENGTH_LONG).show();
if(!outlet6_status)
outlet6.setImageResource(R.drawable.on);
else
outlet6.setImageResource(R.drawable.off);
outlet6_status=!outlet6_status;
break;
default:
break;
}
String state1 = booleanToString(outlet1_status);
String state2 = booleanToString(outlet2_status);
String state3 = booleanToString(outlet3_status);
String state4 = booleanToString(outlet4_status);
String state5 = booleanToString(outlet5_status);
String state6 = booleanToString(outlet6_status);
//building parameter to Send for storing in db
String stateOfMachine = "2-"+state1+","+"3-"+state2+","+"4-"+state3+","+"5-"+state4+","+"6-"+state5+","+"7-"+state6;
new changeSwitchState().execute(stateOfMachine);
}
class changeSwitchState extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(controlFrontEnd.this);
pDialog.setMessage("Please wait..");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected String doInBackground(String... args) {
// TODO Auto-generated method stub
// Check for success tag
int success;
JSONObject json = null;
String stateOfMachine = args[0];
Log.d("to Parse - Control Front End",stateOfMachine);
//Retrieving Saved Username Data:
//SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(controlFrontEnd.this);
//String post_username = sp.getString("username", "anon");
try {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("status", stateOfMachine));
Log.d("request!", "starting");
//Posting user data to script
json = jsonParser.makeHttpRequest(
STATECHANGE_URL, "POST", params);
// full json response
Log.d("Change Status attempt", json.toString());
// json success element
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
Log.d("Status Changed!", json.toString());
finish();
return json.getString(TAG_MESSAGE);
}else{
Log.d("Status Change Failure!", json.getString(TAG_MESSAGE));
return json.getString(TAG_MESSAGE);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
// dismiss the dialog once product deleted
pDialog.dismiss();
if (file_url != null){
Toast.makeText(controlFrontEnd.this, file_url, Toast.LENGTH_LONG).show();
}
}
}
public String booleanToString(boolean logic){
if(logic)
return "1";
else
return "0";
}
}