คืออาจารย์อยากให้แอ๊พของหนู ติดต่อกับเครื่อง server ค่ะ คล้ายๆของเอ็มเคสุกี้ค่ะ คือเวลาสั่งอาหารก็ให้ไปเก็บที่เครื่อง serverค่ะ แต่สั่งจาก mobile นะค่ะ แล้วก็ดึงข้อมูลมาโชที่มือถือได้
ช่วยแนะนำหน่อยค่ะว่าเริ่มยังไง แต่ที่หนูคิดนะ ฝั่งserverต้องติดตั้งsoftwareอะไรสักอย่างเพื่อที่จะเชื่อมต่อกับ mobile
ช่วยอธิบายหนู่หน่อยค่ะ
ขอบคุณมากนะค่ะ
พี่ค่ะถามเพิ่มหน่อยค่ะ
สมมุติหนูมี form อยู่หน้าจะส่งของมูลจากมือถือโดยการกรอกเอาลงไปฐานข้อมูลทางฝั่งserverเนี่ยต้องทำยังไงบ้างค่ะ มันจะใช้คลาสไหนส่ง
พี่พอจะมีโค้ดให้หนูศึกษาบ้างรึป่าวค่ะ
ถ้านั่งศึกษาเองดูแล้วคงจะจบไม่ทันแน่เลยค่ะ
เนียนเป็นสาวไปซะงั้น หึหึหึ
mail พี่หนูเองค่ะ หนูยืมเค้ามา
OK ยังค่ะคุณ harvest หวัง
หรือจะดูทะเบียนบ้านค่ะ
ไม่ดูหรอกครับ ผมแค่ทักเฉย ๆ
ผมแค่สงสัย เลยไปลอง google เล่น ๆ ครับ
หึหึหึ
55555555
555
บอกวิธีติดต่อกับเว็บเซอร์ซิสมาเลย
package rru.WSClientTest;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.Activity;
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;
public class InsertForm extends Activity {
private static final String URL = “http://192.168.98.30/Lichenweb/services/Insert_tree?wsdl”;// URL ของเว็บเซอร์วิส
private static final String SOAP_ACTION = “http://tempuri.org/saveTree”; //สำหรับเรียกไปยังเมทธอดของเว็บเซอร์วิส
private static final String METHOD_NAME= “saveTree”; //ชื่อเมทธอดที่ต้องการเรียกใช้
private static final String NAMESPACE = “http://tempuri.org/”; //กำหนด Namesapce (ค่า default ของ .Net WebService)
private TextView tv1; // TextView สำหรับแสดงผล
private EditText et1,et2,et3,et4;
private Button bt1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.insert);
tv1=(TextView)findViewById(R.id.TextView01);
et1=(EditText)findViewById(R.id.EditText01);
et2=(EditText)findViewById(R.id.EditText02);
et3=(EditText)findViewById(R.id.EditText03);
et4=(EditText)findViewById(R.id.EditText04);
bt1=(Button)findViewById(R.id.Button01);
bt1.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
try {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); //สร้าง SOAPObject
request.addProperty(“tree_id”, et1.getText().toString()); // Parameter ของเมทธอดที่เรียก tree_id คือชื่อเมธอดในเวปเซอร์วิส
request.addProperty(“tree_name”, et2.getText().toString());
request.addProperty(“tree_desc”, et3.getText().toString());
request.addProperty(“tree_picname”, et4.getText().toString());
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); //กำหนดรูปแบบและเวอร์ชั่นของ SOAP Envelope ที่ใช้
envelope.dotNet=true; //ระบุว่าเป็นแบบ dotnet
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive result = (SoapPrimitive)envelope.getResponse();//สร้างตัวแปรประเภท SOAPPrimitive เพื่อรอรับผลลัพธ์จาก WebService
String resultData=result.toString(); //แปลงผลลัพธ์เป็น String
tv1.setText(“>>”+resultData);
} catch (Exception e) {
tv1.setText(e.getMessage());
}
}
});
}
}
———————————————————————————————————-
ลองเอาไปศึกษาดูน๊ะครับ code ตัวนี้ ผมเขียนขึ้นมาลองส่งค่าๆเล่นๆ สามารถนำไปประยุกต์ได้หลายงานเลยครับ
ขอบคุณมากมากเลยค่ะ
ขอถามเพิ่มอีกนิดค่ะ
1.
private static final String URL = “http://192.168.98.30/Lichenweb/services/Insert_tree?wsdl”;// URL ของเว็บเซอร์วิส
ถาม URL นี้คือ url ที่หนูจะ insert ข้อมูลจาก Android ลงตารางที่อยู่ในฐานข้อมูลฝั่งทางเว็บใช่ไหมค่ะ
2.
private static final String SOAP_ACTION = “http://tempuri.org/saveTree”; //สำหรับเรียกไปยังเมทธอดของเว็บเซอร์วิส
ถาม url นี้สำหรับหนูเรียกข้อมูลจากเว็บเพื่อมาโชใน Android ใช่ไหมค่ะ แล้ว method saveTree คือ methodที่ส่งค่าจากเว็บ service เพื่อมาโชใน android ใช่ไหมค่ะ
3.
private static final String NAMESPACE = “http://tempuri.org/”; //กำหนด Namesapce (ค่า default ของ .Net WebService)
ถาม แล้วตรงนี้พอดีหนูใช้ php ค่ะ จะใช้แบบนี้เลยได้ไหมค่ะ
4.
envelope.dotNet=true; //ระบุว่าเป็นแบบ dotnet
ถาม ตรงนี้ถ้าหนูใช้ php หนูจะใส่อะรัยค่ะ
ตอบข้อ1ครับ
ในที่นี้คือ URL ของ server ครับ เป็น part ที่เก็บ code ของ webservice และ ฐานข้อมูลเวลา Insert ข้อมูลจาไหลมาที่ method(จะต้องกำหนดให้รับค่าพารามิเตอร์ด้วย) ของ webservice จากนั้น method จะส่งค่าที่ได้ไปเก็บลงในฐานข้อมูลครับ เวลาจะ select ก็ผ่าน method ของ webservice ด้วยเช่นกัน ไม่เกี่ยวกับเว็บApp ครับ ถ้าเป็นเว็บ App มันจะเชื่อมต่อฐานข้อมูลได้ตายตัวอยู่แล้ว จึงไม่จำเป็นต้องผ่าน webservice แต่ Android ติดต่อ ลำบากครับ เลยต้องเอา
webservice มาเป็นตัวกลางในการเชื่อมต่อฐานข้อมูล พูดไปแล้ว webservice ก็คล้ายๆกับ ล่าม ครับ ที่เป็นตัวกลางให้เราคุยกันคนสัญชาติต่างๆ บนโลกนี้รู้เรื่อง
ตอบข้อที่2ครับ
ใช่ครับ ถ้าเราต้องการเรียกเมธอดใดมาใช้งานก็ต้องทำประมาณนี้ครับ
ชุดนี้ ติดต่อ โปโตคอล Soap ครับ
private static final String SOAP_ACTION = “http://tempuri.org/KeySelect”;
private static final String SOAP_ACTION2 = “http://tempuri.org/DetailSelect”;
private static final String SOAP_ACTION3 = “http://tempuri.org/Advertise”;
เมื่อติดต่อแล้ว ต่อไปถึงค่อนมาเรียกใช้ครับ
private static final String METHOD_NAME= “KeySelect”; //ชื่อเมทธอดที่ต้องการเรียกใช้
private static final String METHOD_NAME2= “DetailSelect”; //ชื่อเมทธอดที่ต้องการเรียกใช้
private static final String METHOD_NAME3= “Advertise”; //ชื่อเมทธอดที่ต้องการเรียกใช้
ตอบข้อที่3ครับ
ในส่วนนี้ ผมใช้ .net เขียน webservice ครับ ส่วนถ้าใช้ภาษาอื่น คิดว่ารูปแบบน่าจะเปลี่ยนไปครับ
ผมลองใช้ java เขียน รูปแบบก็เปลี่ยนไป ในส่วนนี้ผมเลยไม่แน่ใจครับ
ตอบข้อ4ครับ
ในส่วนนี้ยังไม่เคยลองใน php เลยครับ ผมเองก็เพิ่งจับ Android ได้ปรามาณสามเดือนกว่าๆเองครับ
อยากรู้ ว่าทำไมเทรนมันแรงนักก็เลยลองดูครับ เรียนรู้ยากมากครับ สำหรับคนไม่มีพื้นฐานเพราะเอกสารส่วนมากเป็น English ต้องพยายามหาตัวอย่างตามกระทู้แล้วเอามาลองแกะดูครับ
สุดท้ายก็ขอให้คุณ สู้ๆ ต่อไปแล้วกันครับ ไม่มีอะไรยากเกินความสามารถของเราไปได้หรอกครับ ขอแค่ตั้งใจและเวลาครับว่าคุณจะอดทนอยู่กับมันได้นานแค่ไหน
ขอบคุณมากนะค่ะ
เป็นคำแนะนำที่ดีมากๆเลย
ขอรบกวนอีกหน่อยค่ะ
คือหนูขอดู method ที่ใช้รับข้อมูลที่ insert ไป กลับ method ที่ใช้ส่งค่ามาโชที่มือถือหน่อยได้ไหมค่ะ
อยากรู้ว่ามันส่งกันยังไง พอดีตอนนี้หนูยังทำเว็บเซอร์วิสไม่เป็นเลยค่ะ เลยมองภาพไม่ออก
ว่าจะลองศึกษาและลองทำ ปิดปีใหม่ค่ะ
นี่เป็น Code Webservice ที่ใช้ c# เขียนครับ
ลองเอาไปแกะดูแล้วกัน คงช่วยได้ไม่มากก็น้อยแหละคับ
พอดีเข้ามาโพสตอนตี1 เพิ่งทำงานเสร็จครับ เลยเบลอๆ ขอไม่อธิบายอะไรมากแล้วกันครับ นึกคำพูดที่มันฟังแล้วเข้าใจง่ายๆไม่ออก คร่าวๆ ก็ จะมี
1 ทำการติดต่อฐานข้อมูล
2 สร้าง WebMethod
3 ทำการเรียกใช้
ก็จะมีประมาณนี้เองครับ ง่ายๆ ลองแกะดูครับ กัวสงสัยอีกเลย ลากเอามาทั้ง Code เลย น่าจะเข้าใจได้เร็วขึ้นน๊ะครับ การเรียนรู้ด้วยตนเองไม่จำเป็นว่าจะต้องศึกษาจากตำราหรือเอกสารเสมอไปครับ ให้ถามผู้ที่มีความเชี่ยวชาญหรือ ผู้ที่มีความรู้ ในด้านนั้นๆ จะไปได้เร็วมากครับ อย่างเช่นตัวผมเอง ผมศึกษาจากเอกสาร แค่การ เปลี่ยน Activity หรือ การคลิ๊กแล้วให้ลิ้งค์ไปหน้าที่เราต้องการแค่เนี้ย กว่าผมจะได้ก็ สองวัน แนะ หากผมไปถามคนอื่นที่รู้ ก็น่าจะไม่ถึง10นาที ประหยัดเวลาไปได้ตั้งเยอะ สุดท้ายก็ขอให้คุณมีความพยายามต่อไปครับ อย่าท้อครับ คนที่เค้าพัฒนา editor หรือโปรแกรมที่ให้เราเอามาใช้เขียนโปรแกรมอีกทีนึง เค้าลำบากกว่าเราหลายเท่าครับ สู้ๆๆ
——————————————————-
using System;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using System.Drawing;
using System.IO;
using MySql.Data.MySqlClient;
using MySql.Data;
[WebService(Namespace = “http://tempuri.org/”)]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class Service : System.Web.Services.WebService
{
MySqlConnection connection = new MySqlConnection(“server=localhost;database=mare;uid=root;password=123457”);
public Service () {
}
private void ConnectDB() {
connection.Open();
}
[WebMethod]
public string tree_name()//เวลาเรียกก็เรียก เมธอด tree_nameไปใช้
{
connection.Open();
string c = “ไม่มีข้อมูล”;
string myInsertQuery = “Select * from advertise”;
MySqlCommand myCommand1 = new MySqlCommand(myInsertQuery);
myCommand1.Connection = connection;
// connection.Open();
MySqlDataReader objReader = myCommand1.ExecuteReader();
// int nResultCount = 0;
objReader.Read();
c = objReader.GetString(1);
connection.Close();
return c;
}
[WebMethod]
public string tree_desc(string id) // เวลาเรียกก็เรียก เมธอด tree_desc ไปใช้
{
string c = “ไม่มีข้อมูล”;
string myInsertQuery = “Select * from book WHERE Book_ID='”+id+”‘”;
MySqlCommand myCommand = new MySqlCommand(myInsertQuery);
myCommand.Connection = connection;
connection.Open();
MySqlDataReader objReader = myCommand.ExecuteReader();
// int nResultCount = 0;
objReader.Read();
c = objReader.GetString(1);
connection.Close();
return c;
}
[WebMethod]
public string tree_picname(string id) // เวลาเรียกก็เรียก เมธอด tree_picname ไปใช้
{
string c = “ไม่มีข้อมูล”;
string myInsertQuery = “Select * from book WHERE Book_ID=” + id;
MySqlCommand myCommand = new MySqlCommand(myInsertQuery);
myCommand.Connection = connection;
connection.Open();
MySqlDataReader objReader = myCommand.ExecuteReader();
objReader.Read();
c = objReader.GetString(2);
connection.Close();
return c;
}
ขอถามมั่งครับ คุณ tingpalm กับคุณ pongphasad ครับ คือผมอยากจะตกแต่ง หน้าตาโปรแกรมของผมให้สวยงามนอกจาก แต่งใน พร๊อพเพอร์ตี้ ตรง blackgroud แล้ว มี ตรงไหนแต่งได้มั่งอีกครับ
ขอบคุณมากๆนะค่ะคุณ ninechad กับคุณ tingpalm ที่ให้คำแนะนำหนูมาตลอด
แต่ที่คุณ ninechad ถามมา หนูยังไม่ดั้ยศึกษาเลยค่ะ
หนูศึกษาหลักๆ ของแอ๊พหนูอยู่เลยค่ะ ขอโทษด้วยนะค่ะ
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
พวกนี้เราต้องแอดไฟล์ .jar เข้ามาด้วยใช่ไหมค่ะ แล้ววิธีแอด เข้ามาทำยังไงค่ะ
แล้วเวลาเรียกใช้ต้องทำยังงัยค่ะ
รบกวนอีกนิดนึงค่ะ
ตอนนี้ฝั่งserverพอได้แล้วค่ะหนูใช้ NuSOAP เหลือฝั่ง android ยังไม่ได้ค่ะ เกี่ยวกับการเรียกใช้ไฟล์
import org.kxml2.io.KXmlParser;
import org.kxml2.io.KXmlSerializer;
นี้แหละไม่ผ่านค่ะ
ได้แล้วค่ะ
จากนั้นคลิกขาวที่ชื่อโปรเจค แล้งกด refresh เพื่อเป็นการ update folder ที่เราพึ่งสร้าง
ตามมาเราต้องทำการ add library เข้าโปรเจคเสียก่อน
คือ คลิกขาวที่โปรเจคไปที่ Build Path -> Configure Build Path..
จากนั้นไปที่ tab libraries -> Add JARs… -> lib -> sensorsimulator-lib.jar
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
พวกนี้ เป็น import เรียกใช้งาน webservice นิครับ ปกติ ถ้ามีการเรียกใช้ webservice แล้วไม่ได้
import จะมี error หากเราเอาเม้าส์ไปชี้ตรงบรรทัดที่ error มันจะมีคำสั่งขึ้นมาให้เลือกครับ ให้เราเลือกคำสั่งตรงนี้แหละครับ เช่น อาจจะมี ให้ Create class , Method , type หรือ fix project แล้วก็จะมีคำสั่งให้ import ด้วย เมื่อเลือกแล้ว ก็ ทำการ Clean โดยการไปที่เมนูบาร์ ด้านบน ไปที่แทบ Project แล้วเลือก Clean อาจจะหาย ในที่นี้ผมไม่เห้นหน้าจอครับ ถ้าเป็นผมก็จะทำในลักษณะประมาณนี้ก่อน
ถ้ายังไม่หายอีกก็ต้องดู ว่า error ที่ไฟล์ไหน มันฟ้องว่าอะไร ลองวาง bug โปรแกรมดูทีละตำแหน่ง
ไล่ไปเรื่อยๆเดี๋ยวก็เจอครับ
โอเครึยังครับ
ขอบคุณค่ะ
ขอถามอีกนิด
พอดีหัดวาง bug มาหลายครั้งล่ะ ไม่สำเร็จสักที
ทำยังงัยอธิบายหน่อยค่ะ
ก็เปลี่ยนทางเดินโปรแกรมไงครับ สมมุติว่า เราเพิ่ม Code ชุดใหม่ไปแล้วรันไม่ได้ ให้ตรวจสอบจนแน่ใจว่า error ใน Code ชุดใหม่ที่เราเพิ่มไปไม่ได้ error จากส่วนอื่น ก็ ลอง คอมเม้นทีละบันทัด แล้วลองรันไปเรื่อยๆ ก็ประมาณนี้แหละครับ สามารถวางได้หลายอย่างตามลักษณะของการแสดงผลของCode ครับ แค่นี้น่าจะพอเข้าใจน๊ะ ส่วนมากจะทำในกรณี ที่เกิด error แล้วก้ การนำ Code คนอื่นมาแก้