» 首頁 » 討論區 » Android程式設計 »網頁撈出資料回傳至手機端

網頁撈出資料回傳至手機端

發表人: learner
積分: 44
發表時間: 2011-10-25 18:28:03
請問,我在網頁端從資料庫裡撈出一串資料(例如:會員姓名(兩個以上))
那我要如何把這串資料傳回手機端並讓手機端顯示在ListView裡?
是用陣列方式或是有其他方法呢?
發表人: learner
積分: 44
發表時間: 2011-10-26 19:03:38
我找到解析XML的方法了,也把撈到的資料轉成XML擋了

但是我不知道怎麼把轉好的XML檔傳回給android解析

而且傳回來後要先儲存在android(例如:sd卡)再讀取?

還是android端收到檔案可以直接解析?
發表人: Seachaos
積分: 2432
發表時間: 2011-10-27 01:10:42
Hi,
我建議你用JSON格式
這個會比XML簡單的多

從Server來的資料不用存在記憶卡上就可以解析了
不介意的話可以貼上一些你的程式碼,我也許可以幫你看看

另外要回傳給Server的話,資料也是可以用POST的方式
這邊有Android POST的範例
http://www.myandroid.tw/bbs-topic-21.sea
發表人: 訪客
發表時間: 2011-10-27 10:09:14
請問有JOSN的範例嗎??

還有,我的網頁端是用ASP.NET,該怎麼使用JSON的方法??
發表人: Seachaos
積分: 2432
發表時間: 2011-10-27 14:36:57
Android的話如下
[sea:javaCode]
String json = "{\"list1\":{\"1\":\"test\",\"2\":\"test2\",\"3\":\"test3\"},\"url\":\"myandroid.tw\"}";
try {
JSONObject j = new JSONObject(json);
j.getString("url"); // myandroid.tw;
JSONObject list = j.getJSONObject("list1");
list.getString("1"); //test
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
[/sea]

我這邊有PHP的範例
http://www.myandroid.tw/bbs-topic-996.sea

ASP相信也有相關的Funciton可以用
沒有的話應可以自已包 (JSON格式比XML簡單)
發表人: 訪客
發表時間: 2011-10-27 19:36:37
謝謝大大,我大概懂了
只是我沒有找到ASP.NET的JSON方法,只好自己包了

[sea:phpCode]
Dim json As String = "[" //先給一個左括號

For s As Integer = 0 To ds.Tables("result").Rows.Count - 1
json += {'Book_NAME' : ' " & ds.Tables("result").Rows(s).Item(0) & "'}," //把資料填進JSON裡
Next

json.Remove(json.Length - 1)//因為用for loop的關係,會多一個",",所以把它刪掉
json = "]" //補右括號

Response.Write(json)
[/sea]

網頁那邊我視這樣包的,不知道格式對不對QQ
發表人: learner
積分: 44
發表時間: 2011-10-27 20:01:12
剛剛的語法錯了 這個才對@@
[sea:phpCode]
Dim json As String = "["

For s As Integer = 0 To ds.Tables("result").Rows.Count - 1
If s < ds.Tables("result").Rows.Count - 1 Then
json += "{'Book_NAME' : '" & ds.Tables("result").Rows(s).Item(0) & "'},"
ElseIf s = ds.Tables("result").Rows.Count - 1 Then
json += "{'Book_NAME' : '" & ds.Tables("result").Rows(s).Item(0) & "'}"
End If
Next

json += "]"

Response.Write(json)
[/sea]

輸出這串
[{'Book_NAME' : '高爾夫球的揮桿訣竅'},{'Book_NAME' : '運動與健康'},{'Book_NAME' : '乒乓球教學與訓練'}]

這樣格式對嗎??
發表人: Seachaos
積分: 2432
發表時間: 2011-10-30 14:41:14
沒有錯
可以用以下程式碼驗證你的JSON格式

[sea:javaCode]
String json = "[{'Book_NAME' : '高爾夫球的揮桿訣竅'},{'Book_NAME' : '運動與健康'},{'Book_NAME' : '乒乓球教學與訓練'}]";
try {
JSONArray j = new JSONArray(json);
for(int ax=0;ax<j.length();ax++){
JSONObject jobj = j.getJSONObject(ax);
Log.i("msg",jobj.getString("Book_NAME"));
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
[/sea]

(Android的JSON有分Array和Object,這是比較要注意的地方)
發表人: learner
積分: 44
發表時間: 2011-11-01 10:29:42
謝謝 Seachaos大大的指教!!
發表人: learner
積分: 44
發表時間: 2011-11-11 19:36:17
不好意思,又出現問題了

我沒辦法執行程式,它每次都說意外中止

請問,manifest.xml裡面有要另外設定嗎??
發表人: Seachaos
積分: 2432
發表時間: 2011-11-15 14:17:28
Hi,
你有加入
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
嗎?
如果你的程式需要網路的話就要加入這個到AndroidManifest.xml中
發表人: learner
積分: 44
發表時間: 2011-11-15 23:58:14
有,因為基本上都要用到網路,所以有加
我貼androidmanifest.xml給你看看好了

[sea:javaCode]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="eeasybook_f.book"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Eeasybook_fActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="Eshop"></activity>
<activity android:name="Grid_viewActivity"></activity>
<activity android:name="Map"></activity>
<activity android:name="TabhostActivity"></activity>
<uses-library android:name="com.google.android.maps" />
<activity android:name="ForgetPW"></activity>
<activity android:name="Download"></activity>
</application>
</manifest>
[/sea]
發表人: 訪客
發表時間: 2011-11-16 00:54:05
我連解析方式與要被解析的資料一起附上好了

資料:{"Book" : {"Book_INFO" : [{"Book_NAME" : "高爾夫球的揮桿訣竅","Book_PATH" : "GG"},{"Book_NAME" : "運動與健康","Book_PATH" : "GG"},{"Book_NAME" : "乒乓球教學與訓練","Book_PATH" : "GG"},{"Book_NAME" : "健康是走出來的","Book_PATH" : "E:\BOOK\book_info\G0101.epub"}]}}

解析方式:
[sea:javaCode]
httpRequest1.setEntity(new UrlEncodedFormEntity(nvps0, HTTP.UTF_8));
HttpResponse httpResponse=new DefaultHttpClient().execute(httpRequest1);

if(httpResponse.getStatusLine().getStatusCode()==200)
{
StringBuilder builder = new StringBuilder();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent())); //這裡是網路上看到的,但是他打的是B?redReader,所以我不確定用BufferedReader對部隊
for(String s = bufferedReader.readLine(); s != null; bufferedReader.readLine())
{
builder.append(s);
}
Log.i("cat", ">>>>>>" + builder.toString());
JSONObject jsonObject = new JSONObject(builder.toString()).getJSONObject("Book");
JSONArray jsonArray = jsonObject.getJSONArray("Book_INFO");
String[] json = new String[jsonArray.length()];
for(int i = 0; i < jsonArray.length(); i++)
{
JSONObject jsonObject2 = (JSONObject)jsonArray.opt(i);
json[i] = jsonObject2.getString("Book_NAME");
}
listCats.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, json));
}
[/sea]
發表人: Seachaos
積分: 2432
發表時間: 2011-11-18 14:55:04
這邊要注意JSONObject和JSONArray的不同

JSONArray jsonArray = jsonObject.getJSONArray("Book_INFO");
可能要換成
JSONObject
因為你的格式是
"Book" : {"Book_INFO"
發表人: learner
積分: 44
發表時間: 2011-11-20 09:49:28
可是這串

{"Book_INFO" : [{"Book_NAME" : "高爾夫球的揮桿訣竅","Book_PATH" : "GG"},{"Book_NAME" : "運動與健康","Book_PATH" : "GG"},{"Book_NAME" : "乒乓球教學與訓練","Book_PATH" : "GG"},{"Book_NAME" : "健康是走出來的","Book_PATH" : "E:\BOOK\book_info\G0101.epub"}]}

不是代表"Book_INFO"是array嗎??
"Book_INFO"帶了三個陣列元素
發表人: Seachaos
積分: 2432
發表時間: 2011-11-21 01:05:20
是的
這串
{"Book_INFO" : [{"Book_NAME"…
就會變成Book_INFO是一個Array
底下有3個Object
(JSON的Array和Object在Android上要注意操作方式)
發表人: 小Sharon
積分: 2
發表時間: 2012-08-03 10:51:43
樓主你好:

我想請問一下,由於文章有提到"如何把這串資料傳回手機端並讓手機端顯示在ListView裡"

所以想請問樓主要如何"當SERVER接收到Android(client端)所輸入並上傳之資料至MySQL後,可以讓Server自動PUSH訊息給其他USER(其他台Android手機並顯示視窗畫面以告知User)"

這是我的Email:chensuru04351913@gmail.com
希望樓主可以回信,因為有點急,不知道要用甚麼方式來實現讓Server自動PUSH訊息給其他USER
發表人: 訪客
發表時間: 2012-08-06 04:33:46
如果你是要Push這種機制的話
可以看看 Google的GCM
http://developer.android.com/guide/google/gcm/index.html