2011-07-04 4 views
3

ためにJSONデータを解析しよう:アンドロイド、そのために私は私のMySQLのDBに接続するために、私のDBを照会するためにPHPコードを使用しています、私はリモートDBからの私でデータベースを読み込むしようとしていますアンドロイド

ファイル名:check.php:

<?php 
    require_once("php/dbconnect.php"); 
    $query = "SELECT name FROM user "; 
    $result = mysql_query($query) or die("Unable to verify user because : " . mysql_error()); 

    while ($row = mysql_fetch_array($result)) { 
     $output[]=$row['name']; 
    } 

    print(json_encode($output)); 
    mysql_close(); 
?/> 

およびリモートDBに接続するためのJava(アンドロイド)コード:

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.Toast; 
import java.net.URI; 

public class ConnectToMyDb extends Activity { 
    InputStream is; 
    private HttpPost httppost; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     String result = ""; 

     //http post 
     try{ 
      HttpClient httpclient = new DefaultHttpClient(); 
      httppost = new HttpPost("http://www.Myurl.com/check.php"); 

      HttpResponse response = httpclient.execute(httppost); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 
      Log.e("log_tag", "connection success "); 
      Toast.makeText(getApplicationContext(), "pass", Toast.LENGTH_SHORT).show(); 
     }catch(Exception e){ 
      Log.e("log_tag", "Error in http connection "+e.toString()); 
      Toast.makeText(getApplicationContext(), "fail", Toast.LENGTH_SHORT).show(); 

     } 

     //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"); 
        Toast.makeText(getApplicationContext(), "pass", Toast.LENGTH_SHORT).show(); 
     } 

     is.close(); 

     result=sb.toString(); 
    }catch(Exception e){ 
     Log.e("log_tag", "Error converting result "+e.toString()); 
     Toast.makeText(getApplicationContext(), "fail", Toast.LENGTH_SHORT).show(); 
    } 

    //parse json data 
    try{ 
     //ArrayList<Messages> result1 = new ArrayList<Messages>(); 
     JSONArray jArray = new JSONArray(result); 
     JSONObject json_data= new JSONObject(result); 

     for(int i=0;i<jArray.length();i++){ 
      json_data = jArray.getJSONObject(i); 

      Log.i("log_tag"," name: "+json_data.getString("name"); 
        Toast.makeText(getApplicationContext(), "pass", Toast.LENGTH_SHORT).show(); 
     } 
    }catch(JSONException e){ 
     Log.e("log_tag", "Error parsing data "+e.toString()); 
     Toast.makeText(getApplicationContext(), "fail", Toast.LENGTH_SHORT).show(); 
    } 
} 

私の問題のない接続が、JSON iの解析例外が発生する:

Error parsing data org.json.JSONException: 
Value <!DOCTYPE of type java.lang.String cannot be converted to JSONArray 
+1

応答を読み取った後の 'result'文字列の値は何ですか?また、whileループ内にToastがあることに注意してください。私はそれがあなたがたった1つのトーストメッセージを見ている理由は1行戻っていると仮定しますか? –

+0

どのラインが故障していますか? – nickfox

+0

JSONObjectを 'result'文字列から取得する必要があるときにJSONArrayを取得しようとしているため、このエラーが発生しています。 –

答えて

3

Iこの行を取り除くでしょう:

JSONArray jArray = new JSONArray(result); 

、代わりにこれを行う:

JSONObject json_data = new JSONObject(result); 
JSONArray nameArray = json_data.names(); 
JSONArray valArray = json.toJSONArray(nameArray); 

私はこれが正しいと信じて、それにもかかわらず、それはあなたのために働くだろう、このチュートリアルを参考にしてみてください。

Android as a Restful Client

+0

あなたの助けをありがとう! – firco

+0

あなたのコードにjsonとは何ですか? – kirhgoff

+0

私はこの行でJSONArrayを意味します。valArray = json.toJSONArray(nameArray); – kirhgoff

1

JSONに変換しようとしている文字列のように見えます。 result)は実際は完全なHTTP応答です。コードを渡すには、HTMLを除いて、生のJSONだけが必要です。

関連する問題