2011-02-24 21 views
0

私は値を取得するためにAndroidエミュレータとMySQLデータベースを接続する必要がある最後のプロジェクトを開発中です。 Javaファイル:MySQLとのAndroid接続

public class connectivity extends Activity { 
    /** Called when the activity is first created. */ 
    TextView txt; 
    public static final String KEY_121 = "http://10.0.2.2/mysqlcon.php"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     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)); 
    } 

    private String getServerData(String returnString) { 
     InputStream is = null; 
     String result = null; 
     // the year data to send 
     ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
     nameValuePairs.add(new BasicNameValuePair("year", "1970")); 
     // 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 = "0"; 
      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); 
      JSONObject json_data = null; 
      for (int i = 0; i < jArray.length(); i++) { 
       json_data = jArray.getJSONObject(i); 
       Log.i("log_tag", "id: " + json_data.getInt("id") + ", name: " + json_data.getString("name") + ", sex: " + json_data.getInt("sex") + ", birthyear: " + json_data.getInt("birthyear")); 
       // 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; 
    } 
} 

私も自分のAndroidのマニフェストファイルでのインターネットのアクセス許可を与えています。

解析エラーデータorg.json.JSONException:JSONArraytextは文字0

で、私はこれがに行くと思います「[」で開始する必要がありますが、アプリケーションを実行した後、私はlogcatで次のエラーを取得しますヌル値が返されていることを示します。これが私の最後の年のプロジェクトであるので、私を助けてください。私は解決策を見つけるのに何時間も費やしてきたが、それは役に立たなかった。

現在Android 2.2を使用しています。 wampサーバはlocalhost上にあるので、localhost(127.0.0.1)の特別なエイリアスである10.0.2.2というアドレスを使用しています。どんな助けでも本当に感謝します。ここで

は、PHPのコードです:

<?php 
mysql_connect("127.0.0.1","root","chetan"); 
mysql_select_db("db1"); 
$q=mysql_query("SELECT * FROM people WHERE birthyear>'".$_REQUEST['year']."'"); 
while($e=mysql_fetch_assoc($q)) 
$output[]=$e; 
print(json_encode($output,JSON_FORCE_OBJECT)); 
mysql_close(); 

答えて

0

これは実際に私が前に実行した問題です。問題は、サーバーが有効なJSONを出力していないことです。マークアップの一部が欠落しています。 Logcatへの応答の原文を印刷して調べることをお勧めします。おそらくそれをJSON validatorに渡すことさえできます。それは空の値を返すかどうかを判断するのにも役立ちます。空の値を返す場合は、サーバーをデバッグする必要があります。クライアントではありません...

さらに、ブラウザからPHPページにアクセスし、JSON応答を表示させてみてください。これにより、サーバーによって何が書き込まれているのかを確認し、問題の実際の位置を特定するのに役立ちます。サーバーがPOSTをテストする最も簡単な方法は、おそらく単純なhtml形式を作成してPOSTのテストデータを作成することだと考えているからです。そうすることなく、ブラウザにPOSTを実行させると、それ自体が苦しいことがあります。

+0

uhh ..ええ..ここでは.phpのコードが助けになるでしょう... – ethrbunny

+0

ちょっと私は、ブラウザ上のポストメソッドを使ってPHPファイルを実行していると言っています。[{"" id ":" 1 "、"誕生日 "、" 1972 "}、{" id ":" 2 "、" name ":" tanvi "、" sex ":" 0 "、" birthyear ":" 1974 "}]私はそのnull null値を返すとは思わない...だから何が問題になる可能性があります – chetan

0

あなたはphpへの接続を使用する必要がありますか?ない場合は、直接結果を取得するために、MySQLのDBに接続できます。

// Assume function to be : 
public String customerData() { 
    String customerInfo = ""; //To store result 
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     Connection con = 
      DriverManager.getConnection(
       "jdbc:mysql://10.0.2.2:3306/retailer","root","pswrd"); 
     PreparedStatement statement = con.prepareStatement("SELECT * FROM customers"); 
     ResultSet result = statement.executeQuery(); 
     while(result.next()) { 
      customerInfo = customerInfo + result.getString("name") + "&" + 
       result.getString("C_ID") + "&" + result.getString("address") + 
       "&" + result.getString("email"); 
      // Here "&"s are added to the return string. This is help to split the 
      // string in Android application 
     } 
    } catch(Exception exc) { 
     System.out.println(exc.getMessage()); 
    } 
    return customerInfo; 
} 

しかし、あなたのプロジェクトライブラリには、MySQL用のコネクタのjarファイルが含まれています。

+2

このコードを改革してください。読むのはとても難しいです。 – Gray

+0

問題がある場合は今すぐ確認してください。 – Brooklyn

+0

再フォーマットするだけです。疑問がある場合は、サンプルをIDEに書き込んで、再フォーマットし、切り取って貼り付ける必要があります。 – Gray