MySQL と Java (Android 上で) を使用して WAMS サーバーのデータベースにアクセスし、そこから情報を取得しようとしています。私のアプリのセットアップ方法は、ログインしているユーザー名の「uid」を(別のテーブルから)取得して保存する初期ログイン画面があることです。
ログインすると(これは機能します-取得したユーザー名とログインしているユーザーのuidを表示するトースト通知をセットアップします)、取得したデータを表示するためのTextViewフィールドがセットアップされた新しい画面(dashboard.xml)に移動します(から以下に掲載されている表) は、保存された「uid」に関連付けられています。データを取得しようとしているテーブルは次のとおりです。
これで、特定の「uid」に関連付けられた行をデータベースに照会する PHP ファイルをセットアップしました。HTML フォームを使用してこのファイルをテストしました。
$connect = mysql_connect($dbhost, $dbuser, $dbpass) or die("connection error");
mysql_select_db($dbdb)or die("database selection error");
//Retrieve the User ID
$uid = $_POST['uid'];
//Query
$query = mysql_query("SELECT * FROM node WHERE uid='$uid' AND type='goal'");
//store # of rows returned
$num_rows = mysql_num_rows($query);
if ($num_rows >= 1) {
while($results=mysql_fetch_assoc($query)) {
//Store the returned data into a variable
$output = $results;
//encode the returned data in JSON format
echo json_encode($output);
}
mysql_close();
}
uid 値 1 を使用して PHP ファイルをテストした結果は次のとおりです。
{"nid":"1","vid":"1","type":"goal","language":"","title":"test","uid":"1","status ":"1","作成":"1342894493","変更":"1342894493","コメント":"2","昇格":"1","モデレート":"0","スティッキー": "1","tnid":"0","翻訳":"0"}
{"nid":"2","vid":"2","type":"goal","language":"","title":"test2","uid":"1","status ":"1","作成":"1342894529","変更":"1342894529","コメント":"2","昇格":"1","モデレート":"0","スティッキー": "1","tnid":"0","翻訳":"0"}
{"nid":"5","vid":"5","type":"goal","language":"","title":"run","uid":"1","status ":"1","作成":"1343506987","変更":"1343506987","コメント":"2","昇格":"1","モデレート":"0","スティッキー": "1","tnid":"0","翻訳":"0"}
{"nid":"9","vid":"9","type":"goal","language":"","title":"丘まで走る","uid":"1" ,"ステータス":"1","作成":"1343604338","変更":"1343605100","コメント":"2","昇格":"0","モデレート":"0"," sticky":"0","tnid":"0","translate":"0"}
これで、httppost をセットアップし、データベース テーブルの「タイトル」を取得することになっている Android コードをいくつか作成しました。私はそれが間違っていることを知っています(明らかに機能しないため)が、次に何をすべきかについて混乱しています.
import java.io.BufferedReader;
import java.io.IOException;
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.JSONObject;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class Dashboard extends Activity implements OnClickListener {
// variable declarations
String uid = "1";
// create textview to display retrieved data
TextView display;
HttpClient httpclient;
HttpPost httppost;
HttpResponse httpresponse;
HttpEntity httpentity;
ArrayList<NameValuePair> resultArray;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dashboard);
display = (TextView) findViewById(R.id.test);
// initialize HttpClient
httpclient = new DefaultHttpClient();
// initialize HttpPost
httppost = new HttpPost("http://192.168.1.112/android/fetch.php");
try {
// Create new List
List<NameValuePair> resultList = new ArrayList<NameValuePair>();
resultList.add(new BasicNameValuePair("uid", uid));
httppost.setEntity(new UrlEncodedFormEntity(resultList));
httpresponse = httpclient.execute(httppost);
httpentity = httpresponse.getEntity();
InputStream instream = entity.getContent();
try {
// store incoming stream in an array
JSONArray jArray = new JSONArray(streamToString(instream));
JSONObject jData = null;
for (int i = 0; i < jArray.length(); i++) {
jData = jArray.getJSONObject(i);
String goals = jData.getString("title");
display.setText(goals);
}
//} catch (JSONException e) {
//Toast.makeText(this, "No entries found", Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(this, e.toString(), Toast.LENGTH_LONG)
.show();
}
} catch (Exception e) {
e.printStackTrace();
Notifications error = new Notifications();
error.userPassErrorDialog();
}
}
private static String streamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
public void onClick(View v) {
// TODO Auto-generated method stub
}
}
Android エミュレーターでテストすると、次のエラーが発生します。
どんな助けや提案も大歓迎です。