error

  • kara
    Participant

    ช่วยแก้errorหน่อยค่ะ พยายามมาหลายวันแล้ว
    Could not find class ‘org.ksoap2.serialization.SoapObject’, referenced from method service.android.Service.ReceiveData

26 Comments

  • armxy
    armxy
    Participant

    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 นี้เลยครับ

  • kara
    Participant

    ของเรา R18ยังไม่ผ่านค่ะ

  • armxy
    armxy
    Participant

    เริ่มทำตอน R18 หรือว่า Version ต่ำกว่า R17 มาก่อน แล้วมา update เป็น R18 ครับ

  • kara
    Participant

    เริ่มใช้R18ตั้งแต่แรกค่ะ

  • armxy
    armxy
    Participant

    เช็ค external jar เรียบร้อยแล้วใช่มั้ยครับ
    ใน folder libs มี jar ที่ใช้อยู่แล้วรึยังเอ่ย

  • kara
    Participant

    ค่ะเช็คแล้ว

  • kara
    Participant

    แก้ไงหว่า

  • kara
    Participant

    แก้ได้แล้วค่ะดีใจจังเลย

  • armxy
    armxy
    Participant

    แก้ยังไงเอ่ย?

  • kara
    Participant

    เป็นที่elipseค่ะต้องลงใหม่ค่ะ

  • kara
    Participant

    ปัญหาใหม่ค่ะหลังจากที่รันผ่นแล้ว
    แต่มันไม่เข้าtryแต่เข้าcatchแล้วแสดงข้อความว่า” javax.net.ssl.SSLException: Not trusted server certificate “

  • kara
    Participant

    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();
    }

    }
    }

  • Base
    Base
    Participant

    อ่อ อันนี้ คุณต้อง 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 แค่นะครับ ^^

  • kara
    Participant

    ขอบคุณสำหรับคำตอบค่ะ
    ขอคำตอบที่ใช้กับเฟรมเวิคด้วยค่ะ
    เพราะweb serviceเราใช่soap

    • Base
      Base
      Participant

      ผมรู้ไงว่าคุณ ใช้ ksoap2 for android ครับ แต่ผมแนะ วิธีการที่หนึง วิธีที่สอง ผม ก็ไกด์ ให้แล้วไง ครับ ลองๆๆ ทำเองก่อน เนอาะ สู้ๆๆ รับรองวิธีการทีสอง ( Call WebService by ksoap2 for Android) ทำได้ แน่นอน ^^

  • kara
    Participant

    ใช่ค่ะ ก็เราไม่รู้วิธีcall httpsไง
    แล้ว httpClient รันแล้วมันไม่รู้จัก

  • Base
    Base
    Participant

    มันหาไม่เจอได้ ไง เพราะว่า httpClient (DefaultHttpClient) มันเป็น library ของ Android เลยนะ

    มันอยู่ ใน package org.apache.http.impl.client; หรือว่า คุณ import อะไรมาผิดหรือเปล่า ครับ

    ลองๆๆ ใหม่ สู้ต่อ

  • kara
    Participant

    ใช่ค่ะ โดยปกติแล้ว ถ้าlibraryไหนเราไม่มีมันก็จะเตือนให้importอัตโนมัติแต่มันหาไม่เจอจริงๆค่ะ
    อีกอย่าง หาclass EasySSLSocketFactory() ไม่เจอ

  • Base
    Base
    Participant

    ูู^^

  • Base
    Base
    Participant

    ??

  • kara
    Participant

    .

You must be logged in to reply to this topic.

To Top