ช่วยแก้errorหน่อยค่ะ พยายามมาหลายวันแล้ว
Could not find class ‘org.ksoap2.serialization.SoapObject’, referenced from method service.android.Service.ReceiveData
ดูข้อมูลเพิ่มเติมเกี่ยวกับนโยบายความเป็นส่วนตัว และการใช้คุกกี้ของเราคลิก
คุกกี้เหล่านี้มีความสำคัญต่อการให้บริการบนเว็บไซต์แก่คุณ และเพื่อให้คุณสามารถใช้คุณลักษณะบางอย่างได้ คุกกี้เหล่านี้ช่วยในการยืนยันตัวบุคคลของผู้ใช้งานและช่วยป้องกันการปลอมแปลงบัญชีผู้ใช้งาน หากไม่มีคุกกี้เหล่านี้เราอาจไม่สามารถให้บริการแก่คุณได้ เราใช้คุกกี้ดังกล่าวนี้เพื่อให้บริการแก่คุณ
แม้ว่าอาจเกิดคุกกี้ แต่อาจไม่สามารถบันทึกได้เนื่องจากมีสมุดบันทึกที่คุณสามารถอัปเดตได้เว็บไซต์นี้อาจมีคุกกี้หรืออาจเกิดคุกกี้ใหม่อีกครั้ง
ดูข้อมูลเพิ่มเติมคลิก
add external jar เข้ามารึยังครับ ตัว ksoap2 อ่า
ถ้ายังไงลองเช็คว่า imports ถูกมั้ย
อ่อ อีกอย่าง หลังจาก update SDK เป็น R17 อาจจะต้อง remove jar แล้วค่อยแอดเข้าไปใหม่อีกทีนะครับ
http://stackoverflow.com/questions/9871894/android-couldnt-find-classes-after-update-sdk-what-can-i-do ลองดูตาม link นี้เลยครับ
ของเรา R18ยังไม่ผ่านค่ะ
เริ่มทำตอน R18 หรือว่า Version ต่ำกว่า R17 มาก่อน แล้วมา update เป็น R18 ครับ
เริ่มใช้R18ตั้งแต่แรกค่ะ
เช็ค external jar เรียบร้อยแล้วใช่มั้ยครับ
ใน folder libs มี jar ที่ใช้อยู่แล้วรึยังเอ่ย
ค่ะเช็คแล้ว
แก้ไงหว่า
แก้ได้แล้วค่ะดีใจจังเลย
แก้ยังไงเอ่ย?
เป็นที่elipseค่ะต้องลงใหม่ค่ะ
ปัญหาใหม่ค่ะหลังจากที่รันผ่นแล้ว
แต่มันไม่เข้าtryแต่เข้าcatchแล้วแสดงข้อความว่า” javax.net.ssl.SSLException: Not trusted server certificate “
package p6.android;
import android.app.Activity;
import android.os.Bundle;
//import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
public class p6 extends Activity {
private static final String NAMESPACE = “https://192.168.0.71/hello”;
private static final String URL = “https://192.168.0.71/hello/service.asmx”;
private static final String SOAP_ACTION = “https://192.168.0.71/hello/HelloWorld”;
private static final String METHOD_NAME = “HelloWorld”;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
EditText TV = (EditText) findViewById(R.id.data);
TV.setText(ReceiveData());
}
String ReceiveData()
{
SoapObject resultsRequestSOAP = null;
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try
{
androidHttpTransport.call(SOAP_ACTION, envelope);
resultsRequestSOAP = (SoapObject) envelope.getResponse();
return resultsRequestSOAP.toString();
}
catch (Exception e)
{
Toast.makeText(getBaseContext(),e.toString(), Toast.LENGTH_SHORT).show();
return e.toString();
}
}
}
อ่อ อันนี้ คุณต้อง SSL Certificate Verify ของ https:// ครับ code ข้ามบนมัน call services แบบ http:// ธรรมดา
ขออธิบายนิดนึง ครับ คือว่า SSL มันเป้น โปรโตคอลความปลอดภัย ที่ถูกใช้เป็นมาตรฐาน ในการเพิ่มความปลอดภัย ในการสื่อสารหรือส่งข้อมูลบนเครือข่ายอินเทอร์เน็ต ที่มีการการเข้ารหัสแบบ Public-key encryption เป็นการเข้ารหัสที่มี key 2 ส่วนคือ public key(http://) และ private key (https://) แค่นี้ผมก็ งง แล้ว
เอาเนื้อๆๆ เลยละกันครับ
จากประสบการณ์ ในการเรียกใช้งาน call web services (ทีผมใช้นะ อาจมีวิธีอืนๆๆ อีก)
1. HttpPost คือ post url ทีต้องการเรียกไปตรงๆๆ เลย( เซียนๆๆ เขาทำกัน เพราะว่าเราจะได้ xml มากแบบ เอาง่าย ผมตกใจเลย ว่ามันจะ return อะไรมาเยอาะ อ่านก็ไม่รู้เรื่อง แน่นอนว่า วิธีนี้ผมไม่ทำแน่นอน ) แล้วเราก็มากนั่ง Parser xml เอาเอง ค่อยข้างจะยุ่งยาก พอสมควร **งานเข้าอีกแล้วดิ
2. ksoap2 for android อันนี้ก็เหมือน วิธีการเหมือนคุณทำด้านบน (แต่คุณดัง call service http:// ธรรมดา ไป call https:// งานก็เลยเข้าคุณเลยดิ) และ เพราะว่ามันจะ return ค่าแบบว่าเราเอาไปใช้ได้เลย
อันอย่างนี้ แล้วกันคุณจะได้ เรียนรู้ไปด้วย เดียวผมจะให้ source code วิธีที 1 คุณไป
// การ Call แบบ Https Debug ดูค่าที่มัน return กลับมานะครับ หัดใช้งาน Debug ด้วย
private void callWebServicesHttps(){
HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
DefaultHttpClient client = new DefaultHttpClient();
SchemeRegistry registry = new SchemeRegistry();
SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
// registry.register(new Scheme(“https”, socketFactory, 443));
registry.register(new Scheme(“https”, new EasySSLSocketFactory(), 443));
SingleClientConnManager mgr = new SingleClientConnManager(client.getParams(), registry);
DefaultHttpClient httpClient = new DefaultHttpClient(mgr, client.getParams());
// Set verifier
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
// Example send http request
final String url = “ใส่ url https:// ตรงนี้นะครับ”;
HttpPost httpPost = new HttpPost(url);
try {
HttpResponse response = httpClient.execute(httpPost);
HttpEntity responseEntity = response.getEntity();
Log.e(“tag”, “msg”);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.e(“tag”, “msg”);
}
ผมไม่กัก นะครับ เพราะคุณจะได้เรียนรู้ไปด้วย
แนะแนวทางแล้วกัน ของวิธีการที่สอง ต้อง เขียน code HostnameVerifier แค่นะครับ ^^
ขอบคุณสำหรับคำตอบค่ะ
ขอคำตอบที่ใช้กับเฟรมเวิคด้วยค่ะ
เพราะweb serviceเราใช่soap
ผมรู้ไงว่าคุณ ใช้ ksoap2 for android ครับ แต่ผมแนะ วิธีการที่หนึง วิธีที่สอง ผม ก็ไกด์ ให้แล้วไง ครับ ลองๆๆ ทำเองก่อน เนอาะ สู้ๆๆ รับรองวิธีการทีสอง ( Call WebService by ksoap2 for Android) ทำได้ แน่นอน ^^
ใช่ค่ะ ก็เราไม่รู้วิธีcall httpsไง
แล้ว httpClient รันแล้วมันไม่รู้จัก
มันหาไม่เจอได้ ไง เพราะว่า httpClient (DefaultHttpClient) มันเป็น library ของ Android เลยนะ
มันอยู่ ใน package org.apache.http.impl.client; หรือว่า คุณ import อะไรมาผิดหรือเปล่า ครับ
ลองๆๆ ใหม่ สู้ต่อ
ใช่ค่ะ โดยปกติแล้ว ถ้าlibraryไหนเราไม่มีมันก็จะเตือนให้importอัตโนมัติแต่มันหาไม่เจอจริงๆค่ะ
อีกอย่าง หาclass EasySSLSocketFactory() ไม่เจอ
ูู^^
??
.