2014-07-04 163 views
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"; 
    } 
} 

回答

0

我解决了这个问题。该错误是在PHP数据回声。如果您遇到此类错误,请确保您没有向接收方发送垃圾信息,即纯文本。

相关问题