roomezonline

گرفتن اطلاعات در وب سرویس و ریختن ان در listview

13 ارسال در این موضوع قرار دارد

سلام دوستان

خسته نباشید

من یه وب سرویس با دات نت نوشتم

که اطلاعات رو میگیره و پاسخ میده

مثلا

نام کاربر رو بهش میده و به وب سرویس ارسال میکنی

وب سرویس توی بانک سرچ میکنه و در صورت وجود کاربر مشخصات کامل کاربر رو بر میگردونه

اطلاعاتی که که وب یرویس بر میگردونه

1 . user_id

2. user_user

3.user_password

این خروجی xml وب سرویسم هست . اطلاعاتی که نامگذاری و باردهی اطلاعات کرده

[shcode=xml]

 

1

roomezonline

22213

2

mst

ali123

[/shcode]

میشه بگید این اطلاعات رو چطوری توی یه لیست ویو نشون بدم

اینم کد که توی MainActivity.java استفاده کردم

[shcode=java]

import android.os.AsyncTask;

import android.os.Bundle;

import android.app.Activity;

 

import org.ksoap2.SoapEnvelope;

import org.ksoap2.serialization.PropertyInfo;

import org.ksoap2.serialization.SoapObject;

import org.ksoap2.serialization.SoapPrimitive;

import org.ksoap2.serialization.SoapSerializationEnvelope  ;

import org.ksoap2.transport.HttpTransportSE;

 

import com.example.webserviceactivity.R;

 

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.ArrayAdapter;

import android.widget.Button;

import android.widget.EditText;

import android.widget.GridView;

import android.widget.TextView;

 

public class MainActivity extends Activity {

    private final String NAMESPACE = "http://mysite.com";

    private final String URL = "http://mysite.com/Service.asmx";

    private final String SOAP_ACTION = "http://mysite.com/userxml";

    private final String METHOD_NAME = "userxml";

    private String TAG = "PGGURU";

    private static String celcius;

    private static String fahren;

    Button b;

    TextView tv;

    EditText et;

   

         

            static final String[] letters = new String[] {

                fahren};

 

 

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        

          

             

        //Celcius Edit Control

        et = (EditText) findViewById(R.id.editText1);

        //Fahrenheit Text control

        tv = (TextView) findViewById(R.id.tv_result);

        //Button to trigger web service invocation

        b = (Button) findViewById(R.id.button1);

        //Button Click Listener

        b.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                //Check if Celcius text control is not empty

                

                if (et.getText().length() != 0 && et.getText().toString() != "") {

                    //Get the text control value

                    celcius = et.getText().toString();

                    //Create instance for AsyncCallWS

                    AsyncCallWS task = new AsyncCallWS();

                    //Call execute

                    task.execute();

                //If text control is empty

                    

 

                    

 

                } else {

                    tv.setText("Please enter Celcius");

                }

            }

        });

    }

 

    public void getFahrenheit(String celsius) {

        //Create request

        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

        //Property which holds input parameters

        PropertyInfo celsiusPI = new PropertyInfo();

        //Set Name

        celsiusPI.setName("x");

        //Set Value

        celsiusPI.setValue(celsius);

        //Set dataType

        celsiusPI.setType(double.class);

        //Add the property to request object

        request.addProperty(celsiusPI);

        //Create envelope

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(

                SoapEnvelope.VER11);

        envelope.dotNet = true;

        //Set output SOAP object

        envelope.setOutputSoapObject(request);

        //Create HTTP call object

        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

 

        try {

            //Invole web service

            androidHttpTransport.call(SOAP_ACTION, envelope);

            //Get the response

            SoapPrimitive response = (SoapPrimitive) envelope.getResponse();

            //Assign it to fahren static variable

            fahren = response.toString();

            

            

                    

 

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

 

    private class AsyncCallWS extends AsyncTask {

        @Override

        protected Void doInBackground(String... params) {

            Log.i(TAG, "doInBackground");

            getFahrenheit(celcius);

            

        

                    

            return null;

        }

 

        @Override

        protected void onPostExecute(Void result) {

            Log.i(TAG, "onPostExecute");

            tv.setText(fahren ");

            

        }

 

        @Override

        protected void onPreExecute() {

            Log.i(TAG, "onPreExecute");

            tv.setText("Calculating...");

        }

 

        @Override

        protected void onProgressUpdate(Void... values) {

            Log.i(TAG, "onProgressUpdate");

        }

 

    }

 

}

[/shcode]

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

کاری که باید انجام بدی اینه که عمل Deserialize رو شی SoapObject انجام و سپس ایجاد شی  که متد سرویس ان را ارسال کرده که ممکنه لیست باشه یا یک شی و یا اسکالر! با توجه به xml که دادی باید لیستی از کاربران باشه . 

در این سایت کاملا یک مثال همانند کار خودت توضیح داده به همراه deserialize نمودن شی و لیست !

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

کریم جان نتونستم باهاش کار کنم

میشه اونو با کد من ست کنید نمیدونم چه باید کرد

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای اینکار باید ابتدا xml خود را Parse کنید و اطلاعات خود را از تگ ها بگیرید. از کلاس   DefaultHandler برای Parse کردن استفاده کنید و از متد های startElement و endElement برای گرفتن اطلاعات استفاده کنید.

هنگامی که xml خود را Parse کردید میتوانید اطلاعات را درون Adapter های از پیش تعریف شده اندروید یا سفارشی شده قرار دهید و در قدم آخر Adapter را به Listview ست کنید.

[shcode=java]

public class DataHandler extends DefaultHandler {

   

    @Override

    public void startDocument() throws SAXException {

    }

   

    @Override

    public void endDocument() throws SAXException {

    }

    @Override

    public void startElement(String namespaceURI, String localName,

            String qName, Attributes atts) throws SAXException {

       

    }

    @Override

    public void endElement(String namespaceURI, String localName, String qName)

            throws SAXException {

        Log.v("endElement", localName);

       

    }

   

    @Override

    public void characters(char ch[], int start, int length) {

        String chars = new String(ch, start, length);

        chars = chars.trim();

       

    }

}

[/shcode]

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

کریم جان نتونستم باهاش کار کنم

میشه اونو با کد من ست کنید نمیدونم چه باید کرد

خوب وب سرویسش رو ندادی من خودم یک وب سرویس تست نوشتم هر دو سورس رو میزارم   (اقا فرزاد هم  روش استفاده از کتابخانه SAX جهت parse محتویات xml  توضیح داده منتها چون سورس شما از Ksoap  استفاده شده نمونه سورس رو با کمک SoapObject نوشتم ) 

StudentListViewSoapWebService

WebService1

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام کریم جان

مرسی از لطفت اما متاسفانه من نتونستم باهاش کار کنم

اطلاعات مورد نیاز رو واستون میل کردم . هم پروژه اندروید هم وب سرویس رو

مرسی

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام کریم جان

مرسی از لطفت اما متاسفانه من نتونستم باهاش کار کنم

اطلاعات مورد نیاز رو واستون میل کردم . هم پروژه اندروید هم وب سرویس رو

مرسی

ایمیلی از شما دریافت نکردم! 

سورس سرویس هم که PM داده بودی به vb.net نوشته بودی فقط کافیه بجای DataSet از نوع داده Generic مانند List استفاده کنی همون طور که در سورس سرویس سی شارپ در پست بالا استفاده کردم! لیست generic نسبت به DataSet خروجی فایل xml اش ساده تره واسه Parse کردن !

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

کریم جان سورس ها رو واست پیام خصوصی کردم و توی یاهو هم لینک کردم واست . مرسی

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

کریم جان سورس ها رو واست پیام خصوصی کردم و توی یاهو هم لینک کردم واست . مرسی

اگه اشکالی نداره برای استفاده بقیه  اخرین سورس سرویس (سی شارپش خوبه)  و برنامه رو اینجا بزار!

چون اینجا کلا تاپیک های آموزشیه و قبل از اینکه مدیرا اشاره کنند خودمون اینکار رو بکنیم :D.

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

در نهایت این مشکل با کمک فراوان اقای karim_medusa حل شد

کدش رو میزارم که دوستان هم استفاده کنند

این کد نهایی من هست که خیلی خوب هم کار میکنه:

[align=left]}[/align]

[align=left]import java.util.ArrayList;

[/align]

[align=left]import java.util.List;[/align]

[align=left]import org.ksoap2.SoapEnvelope;[/align]

[align=left]import org.ksoap2.serialization.SoapObject;[/align]

[align=left]import org.ksoap2.serialization.SoapPrimitive;[/align]

[align=left]import org.ksoap2.serialization.SoapSerializationEnvelope;[/align]

[align=left]import org.ksoap2.transport.HttpTransportSE;[/align]

[align=left]import android.app.Activity;[/align]

[align=left]import android.os.Bundle;[/align]

[align=left]import android.util.Log;[/align]

[align=left]import android.widget.ArrayAdapter;[/align]

[align=left]import android.widget.ListView;[/align]

[align=left]public class MainActivity extends Activity {[/align]

[align=left]    private final String         NAMESPACE   = "http://ypursite.com";[/align]

[align=left]    private final String         URL         = "http://yoursite.com/Service.asmx";[/align]

[align=left]    private final String SOAP_ACTION = "http://yoursite.com/RetrieveStudents";[/align]

[align=left]    private final String         METHOD_NAME = "RetrieveStudents";[/align]

[align=left]    private ListView             studentsListView;[/align]

[align=left]    private ArrayAdapter adapter;[/align]

[align=left]    /** Called when the activity is first created. */[/align]

[align=left]    @Override[/align]

[align=left]    public void onCreate(Bundle savedInstanceState) {[/align]

[align=left]        super.onCreate(savedInstanceState);[/align]

[align=left]        setContentView(R.layout.main);[/align]

[align=left]        studentsListView = (ListView) findViewById(R.id.listView1);[/align]

[align=left]        String[] students = retrieveStudents();[/align]

[align=left]        adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, students);[/align]

[align=left]        studentsListView.setAdapter(adapter);[/align]

[align=left]    }[/align]

[align=left]    private String[] retrieveStudents() {[/align]

[align=left]        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);[/align]

[align=left]        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope([/align]

[align=left]                SoapEnvelope.VER11);[/align]

[align=left]        envelope.dotNet = true;[/align]

[align=left]        envelope.setOutputSoapObject(request);[/align]

[align=left]        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);[/align]

[align=left]        [/align]

[align=left]        [/align]

[align=left]        try {[/align]

[align=left]           // androidHttpTransport.call(NAMESPACE + METHOD_NAME, envelope);[/align]

[align=left]            androidHttpTransport.call(SOAP_ACTION, envelope);[/align]

[align=left]            SoapObject response = (SoapObject) envelope.getResponse();[/align]

[align=left]            return parseSOAPResponse(response);[/align]

[align=left]        }[/align]

[align=left]        catch (Exception e) {[/align]

[align=left]            e.printStackTrace();[/align]

[align=left]        }[/align]

[align=left]        return null;[/align]

[align=left]    }[/align]

[align=left]    [/align]

[align=left]    [/align]

[align=left]    [/align]

[align=left]    [/align]

[align=left]    [/align]

[align=left]    [/align]

[align=left]    private String[] parseSOAPResponse(SoapObject studentsSoap) {[/align]

[align=left]        if (studentsSoap != null) {[/align]

[align=left]            int count = studentsSoap.getPropertyCount();[/align]

[align=left]            List students = new ArrayList();[/align]

[align=left]            for (int i = 0; i < count; i++) {[/align]

[align=left]                SoapObject stu = (SoapObject) studentsSoap.getProperty(i);[/align]

[align=left]                String id = stu.getPrimitivePropertySafelyAsString("Id");[/align]

[align=left]                String userName = stu.getPrimitivePropertySafelyAsString("UserName");[/align]

[align=left]                students.add(id);[/align]

[align=left]                students.add(userName);[/align]

[align=left]            }[/align]

[align=left]            return students.toArray(new String[students.size()]);[/align]

[align=left]        }[/align]

[align=left]        return null;[/align]

[align=left]  

 }[/align]

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سوال دیگه

خروجی کد بالا بصورت عکس زیر هست . 

150x250http://uploadco.ir/uploads/3fhpnino4c5ak4kkxne.jpg[/img]

حالا میخوام خروجی من بصورت عکس زیر باشه . متاسفانه  زیاد در موردش تحقیق کردم ظاهرا باید را hashmap این کارو کرد ولی خروجی این کد رو نتونستم با hashmap ست کنم . حالا اگر کسی از دوستان با توجه به کد بالا بتونه خروجی لیست رو بصورت سفارشی تبدیل کنه خیلی لطف میکنه

232x149http://uploadco.ir/uploads/93gdqlprkbb59b3jk0d5.jpg[/img]

منتظر راهنمایی های خوبتون هستم

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام به سلامتی اقا کریم از مسافرت برگشت . کریم جان اگر ادامه سوالم رو خوندی میشه بگید چه باید کرد

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

ممنون! معمولا از Theme استفاده میشه تو همچین مواقعی! در پست های قبلی سرویس شما لیستی از  کاربران رو نشون میداد ولی در پست بالا مشخصات یک کاربر رو میخوای نشون بدی!

اگه منظور نمایش لیستی از مشخصات کاربران باشه که باید لیست ویو سفارشی بشه واسه این کار باید xml برای تعریف ایتم های لیست ویو ایجاد و بعد با کمک adapter به لیست ویو داده بشه! 

یک نمونه کد هم اینجا گذاشتم! 

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری