0

データベースのデータを読み取ってアプリケーションで使用しようとしています。そのため、php スクリプトを Web サービスとして使用して Mysql db に接続していますが、プログラムが Json の解析で例外をスローします。解析セクションを削除し、結果の値をログに出力すると、 null と表示されます。なぜ結果の値が null なのですか? エラーは何ですか?

私はネット上で検索し、考えられるすべての解決策を試しましたが、それでも問題は解決しません。助けてください……この問題を解決するにはどうすればよいですか?

これは、結果の値を出力したときのログです:


postExecute メソッドのsb.tostring null の後のnull

エクササイズ.php

   <?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 クラス

    public class  ExercisesActivity  extends Activity{
            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());
              //                    }

          }

                }}
4

1 に答える 1

0

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

これを行うと、実際に到達可能な JSON 出力があるかどうかを確認できるようになります。

于 2012-04-06T14:22:51.367 に答える