2012-01-27 18 views
1

私は次のチュートリアルを実行しました: http://www.anddev.org/networking-database-problems-f29/connecting-to-mysql-database-t50063.html androidデバイスをsqlserver(2005)にphpで接続するためのチュートリアルです。私は私のPHPスクリプトをチェックし、それが実行され、正常に実行されます。私は私のプログラムを実行すると、私は次のエラーを取得:JSONの接続時の解析エラーが発生しました

01-26 14:17:43.491: E/log_tag(331): Error parsing data org.json.JSONException: Value Connection of type java.lang.String cannot be converted to JSONArray 
01-27 09:24:13.610: E/log_tag(404): Error parsing data org.json.JSONException: Value Connection of type java.lang.String cannot be converted to JSONArray 
01-27 09:26:45.190: E/log_tag(437): Error parsing data org.json.JSONException: Value Connection of type java.lang.String cannot be converted to JSONArray 
01-27 09:31:14.221: E/log_tag(471): Error parsing data org.json.JSONException: Value Connection of type java.lang.String cannot be converted to JSONArray 
01-27 09:43:44.501: E/log_tag(504): Error parsing data org.json.JSONException: Value Connection of type java.lang.String cannot be converted to JSONArray 

を私は私のプログラムは、データベースに接続し、EngineerIdゼロより大きいみんなの名前を返すようにしたいです。ここに私のコードは次のとおりです。ここで

package com.david.DbConnect; 


import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.LinearLayout; 
import android.widget.TextView; 


public class DbConnectActivity extends Activity { 
/** Called when the activity is first created. */ 

    TextView txt; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    // Create a crude view - this should really be set via the layout resources 
    // but since its an example saves declaring them in the XML. 
    LinearLayout rootLayout = new LinearLayout(getApplicationContext()); 
    txt = new TextView(getApplicationContext()); 
    rootLayout.addView(txt); 
    setContentView(rootLayout); 

    // Set the text and call the connect function. 
    txt.setText("Connecting..."); 
    //call the method to run the data retreival 
    txt.setText(getServerData(KEY_121)); 



} 
public static final String KEY_121 = "http://xxx.xxx.xx.xx/dbconnect.php"; //i use my real ip here 



private String getServerData(String returnString) { 

    InputStream is = null; 

    String result = ""; 
    //the year data to send 
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
    nameValuePairs.add(new BasicNameValuePair("EngID","0")); 

    //http post 
    try{ 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost(KEY_121); 
      // httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      HttpResponse response = httpclient.execute(httppost); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 

    }catch(Exception e){ 
      Log.e("log_tag", "Error in http connection "+e.toString()); 
    } 

    //convert response to string 
    try{ 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
        sb.append(line + "\n"); 
      } 
      is.close(); 
      result=sb.toString(); 
    }catch(Exception e){ 
      Log.e("log_tag", "Error converting result "+e.toString()); 
    } 
    //parse json data 
    try{ 
      JSONArray jArray = new JSONArray(result); 
      for(int i=0;i<jArray.length();i++){ 
        JSONObject json_data = jArray.getJSONObject(i); 
        Log.i("log_tag","ContactName: "+json_data.getInt("ContactName") 
        ); 
        //Get an output to the screen 
        returnString += "\n\t" + jArray.getJSONObject(i); 
      } 
    }catch(JSONException e){ 
      Log.e("log_tag", "Error parsing data "+e.toString()); 
    } 
    return returnString; 
} 

} 

は私のPHPスクリプトです:

<?php 
$serverName = "xxxxxx"; //serverName\instanceName 
$connectionInfo = array("Database"=>"xxxxxx", "UID"=>"xxxxxxxx", "PWD"=>"xxxxxxx"); 
$conn = sqlsrv_connect($serverName, $connectionInfo); 

if($conn) { 
    echo "Connection established.<br />"; 
}else{ 
    echo "Connection could not be established.<br />"; 
    die(print_r(sqlsrv_errors(), true)); 
} 

//----------------------------------------------- 
// Perform operations with connection. 
//----------------------------------------------- 
$sql = "SELECT ContactName FROM dbo.TBL_FACILITY_JOB_CALLS WHERE EngineerID>'".$_REQUEST['EngID']."'" ; 
$stmt = sqlsrv_query($conn, $sql); 
if ($stmt === false) { 
    die(print_r(sqlsrv_errors(), true)); 
} 

while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { 
     echo $row['ContactName']. "<br />"; 
} 

sqlsrv_free_stmt($stmt); 



while($e=sqlsrv_fetch_assoc($row)) 

       $output[]=$e; 

      print(json_encode($output)); 

    sqlsrv_close(); 





?> 

誰もがこの上でいくつかの光を当てることができますか?それは私の頭を何日間も破壊してきました。ありがとう

答えて

3

あなたは間違ったデータをPHPで出力しています。

除く
echo "Connection established.<br />"; 

およびその他のecho'edデータ:

print(json_encode($output)); 

またあなたが任意のデータ出力を送信する前に、JSONのヘッダを追加する必要を削除する必要がありますのであなたは、出力JSON以外の任意のデータをすることはできません。

header('Content-type: application/json'); 
+0

エコーデータを取り出すと、接続エラーが表示されます。http接続のエラー。org.apache.http.conn.HttpHostConnectException:http://10.0.2.2への接続が拒否されました。何か案は?? – DMC

0

サーバーから取得しているデータは、Jsonファイルの形式ではないと思います。

JSONArray jArray = new JSONArray(result); 
  1. は、結果文字列には、JSONファイル構造のデータが存在しなければならないことを確認してください:あなたは、ラインでの例外を持っています。
  2. jsonからのデータをjsonファイルの構造に応じて抽出します。
関連する問題