Replies from ninechad
เช็ค เงื่อนไขเอาซิครับ ถ้าเป็นไปได้ ขอดู Code ที่ติดปัญหาหน่อย ครับ จะได้แก้ ให้ถูก
คร่าวๆ
input = แอพที่พัฒนาบนแอนดรอดย์
connect = webservice เป็นตัวกลางทำให้ Android คุยกับ database ได้สะดวกขึ้น
database = ฐานข้อมูล
ทั้งหมดนี้ต้องทำการเชื่อมต่อ internet หรือ อยู่ในวงแลนเดียวกัน test เล่นๆก็ เอา routerที่เป็นaccess point ทำแลน ก็ได้ครับ หนุกดี
ในนี้ใครมีเมลพี่ เนย มั่งฮะ นี่ ขอผมหน่อยครับ อยากคุยกะแกนิดหน่อย หรือ เบอร์ บริษัทหัวลำโพงก็ได้ครับ
ติดต่อได้แล้วเหรอครับ ดีเลย จะได้สอนผม เวลาผมลืมอะ
ก็เปลี่ยนทางเดินโปรแกรมไงครับ สมมุติว่า เราเพิ่ม Code ชุดใหม่ไปแล้วรันไม่ได้ ให้ตรวจสอบจนแน่ใจว่า error ใน Code ชุดใหม่ที่เราเพิ่มไปไม่ได้ error จากส่วนอื่น ก็ ลอง คอมเม้นทีละบันทัด แล้วลองรันไปเรื่อยๆ ก็ประมาณนี้แหละครับ สามารถวางได้หลายอย่างตามลักษณะของการแสดงผลของCode ครับ แค่นี้น่าจะพอเข้าใจน๊ะ ส่วนมากจะทำในกรณี ที่เกิด error แล้วก้ การนำ Code คนอื่นมาแก้
โอเครึยังครับ
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 โปรแกรมดูทีละตำแหน่ง
ไล่ไปเรื่อยๆเดี๋ยวก็เจอครับ
ขอถามมั่งครับ คุณ tingpalm กับคุณ pongphasad ครับ คือผมอยากจะตกแต่ง หน้าตาโปรแกรมของผมให้สวยงามนอกจาก แต่งใน พร๊อพเพอร์ตี้ ตรง blackgroud แล้ว มี ตรงไหนแต่งได้มั่งอีกครับ
นี่เป็น 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;
}
กำลังจะทำอยู่พอดีเลย มีคนตัดหน้าไปซะแล้ว กิกิ
ตอบข้อ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 ต้องพยายามหาตัวอย่างตามกระทู้แล้วเอามาลองแกะดูครับ
สุดท้ายก็ขอให้คุณ สู้ๆ ต่อไปแล้วกันครับ ไม่มีอะไรยากเกินความสามารถของเราไปได้หรอกครับ ขอแค่ตั้งใจและเวลาครับว่าคุณจะอดทนอยู่กับมันได้นานแค่ไหน
ตรง date ครับ ที่เป็นปฎิทินอะครับ ใช้ Layout หรือ View ตัวไหนครับ
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 ตัวนี้ ผมเขียนขึ้นมาลองส่งค่าๆเล่นๆ สามารถนำไปประยุกต์ได้หลายงานเลยครับ