رفتن به مطلب
انجمن اندروید ایران | آموزش برنامه نویسی اندروید و موبایل
  • android.png.1fab383bc8500cd93127cebc65b1dcab.png

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


پست های پیشنهاد شده

سلام دوستان

خسته نباشید

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

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

مثلا

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

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

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

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 به لیست ویو داده بشه! 

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

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

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...