2012-04-06 9 views
0

データベース内のデータを読み込み、アプリケーションで使用しようとしていますが、WebサービスとしてPHPスクリプトを使用してMySQLデータベースに接続しようとしていますが、Jsonの解析で例外がスローされます解析セクションを削除してログに結果値を出力しようとしましたが、nullが表示され、結果の値がnullになったのはなぜですか?エラーは何ですか?なぜMYSQLからアンドロイドアプリケーションに返された結果がnullですか?

ネットで検索し、すべての解決策を試しましたが、問題は解決しません。この問題を解決するにはどうすればよいですか?

Exercise.php postExecute方法で
ヌルをsb.tostring後

ヌル :私は、結果の値を印刷したとき

は、これが私のログです

<?php $Name=$_REQUEST['name']; mysql_connect("localhost","user","pass"); mysql_select_db("MYDB"); $sql=mysql_query("select burnedCalories from Exercise where name='$Name' "); while($row=mysql_fetch_assoc($sql)) $output=$row; print(json_encode($output)); mysql_close(); ?> 

Javaクラス

  private String selected_ex_Name ="Walking"; 
      private int calorie_factor; 
      public void onCreate(Bundle savedInstanceState) 
      { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.exercise_details); 
       new ConnectTask().execute(); 


       } 

    private class ConnectTask extends AsyncTask<Void,Void,String> 
    {  
private String result=""; 
private InputStream is=null; 
protected String doInBackground(Void... params) { 


try 
{ 
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
nameValuePairs.add(new BasicNameValuePair("name",selected_ex_Name)); 
HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost("http://10.0.2.2/Exercise.php"); 
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
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,"utf-8"),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()); 
     } 

     Log.e("log_tag", result+ "after sb.tostring "); 
     return result; 
     } 


protected void onPostExecute(String result){ 

       Log.e("log_tag", result+" in postExecute method "); 

      //   try{ 
    //     JSONArray jArray = new JSONArray(result); 
    //     JSONObject json_data=null; 
    //     for(int i=0;i<jArray.length();i++) 
    //     { 
    //      json_data = jArray.getJSONObject(i); 
    //        calorie_factor=json_data.getInt("burnedCalories"); 
      //     } 
      // 
      //    } 
      //     catch(JSONException e){ 
      //     Log.e("log_tag", "Error parsing data "+e.toString()); 
       //     } 

      } 

       }} 
+0

ブラウザでphpスクリプトを確認しましたか?それは出力を出力しますか?私にとっては、http://10.0.2.2/Exercise.phpは機能しません。あなたがブラウザに接続できない場合、あなたはアプリでそれを行うことはできません、なぜそれがnullになるのですか? –

+0

10.0.2.2を使用してエミュレータでアプリケーションを実行し、PHPスクリプトはブラウザ上で動作します – user

+0

Iそれが問題だとは思わないが、 'httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));'が2回ある。 'is'変数を' Log'しようとします。それもヌルですか? –

答えて

0

PHPスクリプトはhttp://10.0.2.2/Exercise.php上にあるので、おそらくいくつかのローカルマシン上で。あなたがブラウザからアクセスしてJSON出力を表示しても、あなたのアプリはそれにアクセスできません。それで、それを外部サーバに置き、そこからそこに接続してください - あなたはHttpPost httppost = new HttpPost("http://10.0.2.2/Exercise.php");のURLを新しいものに変更しなければなりません。

これを実行すると、実際に到達可能なJSON出力があるかどうかを確認することができます。なぜなら、あなたのログの外観から、あなたが持っていないと思われるからです。

関連する問題