Thursday 6 February 2014

Populate spinners using object returned by soap web service in android. Using string array as response from .net web service.

Populate the spinner with response from the web service . Where the response is in string array format.







Step 1: Create new project and in your layout file place a spinner.

Activity_main.xml:


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<Spinner
android:id="@+id/spinner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp" />

</RelativeLayout>

Step 2: Add uses permission Internet in your project manifest file.

AndroidManifest.xml:


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.exam.district"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.INTERNET"/>

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.exam.district.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>

Step 3:Include the KSOAP2 jar file in to your project.
Right click project
Properties Java build path Libraries Tab Add External Jars browse and add KSOAP2 Jar file.

Step 4: Then in your main class copy this code.

MainActivity.java
:

package com.exam.district;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;

public class MainActivity extends Activity {

String list[];
boolean exc=false;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

new addassdist().execute();
}

class addassdist extends AsyncTask<Void, Void, Void> {

private final ProgressDialog dialog = new ProgressDialog(MainActivity.this);

private final String SOAP_ACTION = "http://tempuri.org/GetDistrict";
private final String METHOD_NAME = "GetDistrict";
private final String NAMESPACE = "http://tempuri.org/";
private final String URL = "http://192.160.1.1/district/service.asmx";

@Override
protected void onPreExecute() {
this.dialog.setMessage("Loading data");
this.dialog.show();
}

@Override
protected Void doInBackground(Void... unused) {

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);
SoapObject response = (SoapObject) envelope.getResponse();

System.out.println("response"+response);
int intPropertyCount = response.getPropertyCount();
list= new String[intPropertyCount];

for (int i = 0; i < intPropertyCount; i++)
{
list[i] = response.getPropertyAsString(i).toString();
}
}

catch (Exception e) {
exc=true;
e.printStackTrace();
}
return null;
}

@Override
protected void onPostExecute(Void result) {

if (this.dialog.isShowing()) {
this.dialog.dismiss();
}
if(exc)
{
Toast.makeText(MainActivity.this,"Error" , Toast.LENGTH_LONG).show();
}
else{
spinner();
exc=false;
}
}
}

public void spinner(){

Spinner spinner1 = (Spinner) findViewById(R.id.spinner1);

ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, list);
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(adapter1);

spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onNothingSelected(AdapterView<?> parent) {

}

@Override
public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id) {
// your code
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}

21 comments:

  1. 02-06 08:32:00.972: E/AndroidRuntime(1762): FATAL EXCEPTION: AsyncTask #1
    02-06 08:32:00.972: E/AndroidRuntime(1762): Process: com.example.spinnerfromwebservice, PID: 1762
    02-06 08:32:00.972: E/AndroidRuntime(1762): java.lang.RuntimeException: An error occured while executing doInBackground()
    02-06 08:32:00.972: E/AndroidRuntime(1762): at android.os.AsyncTask$3.done(AsyncTask.java:300)
    02-06 08:32:00.972: E/AndroidRuntime(1762): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
    02-06 08:32:00.972: E/AndroidRuntime(1762): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
    02-06 08:32:00.972: E/AndroidRuntime(1762): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
    02-06 08:32:00.972: E/AndroidRuntime(1762): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
    02-06 08:32:00.972: E/AndroidRuntime(1762): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    02-06 08:32:00.972: E/AndroidRuntime(1762): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    02-06 08:32:00.972: E/AndroidRuntime(1762): at java.lang.Thread.run(Thread.java:841)
    02-06 08:32:00.972: E/AndroidRuntime(1762): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
    02-06 08:32:00.972: E/AndroidRuntime(1762): at android.os.Handler.(Handler.java:200)
    02-06 08:32:00.972: E/AndroidRuntime(1762): at android.os.Handler.(Handler.java:114)
    02-06 08:32:00.972: E/AndroidRuntime(1762): at android.widget.Toast$TN.(Toast.java:327)
    02-06 08:32:00.972: E/AndroidRuntime(1762): at android.widget.Toast.(Toast.java:92)
    02-06 08:32:00.972: E/AndroidRuntime(1762): at android.widget.Toast.makeText(Toast.java:241)
    02-06 08:32:00.972: E/AndroidRuntime(1762): at com.example.spinnerfromwebservice.MainActivity$addassdist.doInBackground(MainActivity.java:77)
    02-06 08:32:00.972: E/AndroidRuntime(1762): at com.example.spinnerfromwebservice.MainActivity$addassdist.doInBackground(MainActivity.java:1)
    02-06 08:32:00.972: E/AndroidRuntime(1762): at android.os.AsyncTask$2.call(AsyncTask.java:288)
    02-06 08:32:00.972: E/AndroidRuntime(1762): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    02-06 08:32:00.972: E/AndroidRuntime(1762): ... 4 more

    ReplyDelete
    Replies
    1. This is the error shown while I was trying to execute your code here.

      Delete
    2. Try now I've made some changes.

      Delete
    3. Working or still have problem with it? what response you got from service? see print statement in logcat.

      Delete
    4. it's now working! I'm so sorry for the late reply but thank you for helping me! It's a great convenience. :)

      Delete
    5. You're welcome. I'm so glad to help you. :) you can look around the other post in blog archive it will be helpful for you.

      Delete
  2. Hello sir ,I did above code as it is.but i unable to set value to spinner ."getPropertyAsString()"not acceptable in my code .how to access this method ?
    I got response as following

    responseanyType{schema=anyType{element=anyType{complexType=anyType{choice=anyType{element=anyType{complexType=anyType{sequence=anyType{element=anyType{simpleType=anyType{restriction=anyType{maxLength=anyType{}; }; }; }; }; }; }; }; }; }; }; diffgram=anyType{DocumentElement=anyType{Activities=anyType{Title=अतुल; }; Activities=anyType{Title=अॅक्टिविटी; }; Activities=anyType{Title=ghfghh; }; Activities=anyType{Title=ssssssssssssss; }; Activities=anyType{Title=Continuous Contour Trench; }; Activities=anyType{Title=Farm Pond; }; Activities=anyType{Title=Earthen Dam; }; Activities=anyType{Title=Check Dam; }; Activities=anyType{Title=Farm pond; }; Activities=anyType{Title=fsd; }; Activities=anyType{Title=jjk; }; Activities=anyType{Title=erer; }; }; }; }
    and I want to set value of title to spinner but i unable to do this help me please solve this problem...

    ReplyDelete
  3. Hello sir, I unable to set value to spinner .in my code "getPropertyAsString()" not acceptable please tell me to access it .please help me to solve this problem

    I got response as following format
    responseanyType{schema=anyType{element=anyType{complexType=anyType{choice=anyType{element=anyType{complexType=anyType{sequence=anyType{element=anyType{simpleType=anyType{restriction=anyType{maxLength=anyType{}; }; }; }; }; }; }; }; }; }; }; diffgram=anyType{DocumentElement=anyType{Activities=anyType{Title=अतुल; }; Activities=anyType{Title=अॅक्टिविटी; }; Activities=anyType{Title=ghfghh; }; Activities=anyType{Title=ssssssssssssss; }; Activities=anyType{Title=Continuous Contour Trench; }; Activities=anyType{Title=Farm Pond; }; Activities=anyType{Title=Earthen Dam; }; Activities=anyType{Title=Check Dam; }; Activities=anyType{Title=Farm pond; }; Activities=anyType{Title=fsd; }; Activities=anyType{Title=jjk; }; Activities=anyType{Title=erer; }; }; }; }

    ReplyDelete
    Replies
    1. I think your response is in JSON format. For JSON format try this link
      http://andygeeks.blogspot.in/2014/04/parse-json-format-data-from-soap-web.html

      Delete
    2. hello sir i solved this problem.and really what u post is to good.Now i have one problem with dependent spinner.I god following error.

      07-28 03:15:47.795: W/ActivityManager(374): Scheduling restart of crashed service com.android.inputmethod.latin/.LatinIME in 5000ms
      07-28 03:15:47.845: W/InputMethodManagerService(374): Session failed to close due to remote exception
      07-28 03:15:47.845: W/InputMethodManagerService(374): android.os.DeadObjectException
      07-28 03:15:47.845: W/InputMethodManagerService(374): at android.os.BinderProxy.transact(Native Method)
      07-28 03:15:47.845: W/InputMethodManagerService(374): at com.android.internal.view.IInputMethodSession$Stub$Proxy.finishSession(IInputMethodSession.java:292)
      07-28 03:15:47.845: W/InputMethodManagerService(374): at com.android.server.InputMethodManagerService.finishSessionLocked(InputMethodManagerService.java:1359)
      07-28 03:15:47.845: W/InputMethodManagerService(374): at com.android.server.InputMethodManagerService.clearClientSessionLocked(InputMethodManagerService.java:1350)
      07-28 03:15:47.845: W/InputMethodManagerService(374): at com.android.server.InputMethodManagerService.clearCurMethodLocked(InputMethodManagerService.java:1376)
      07-28 03:15:47.845: W/InputMethodManagerService(374): at com.android.server.InputMethodManagerService.onServiceDisconnected(InputMethodManagerService.java:1395)
      07-28 03:15:47.845: W/InputMethodManagerService(374): at android.app.LoadedApk$ServiceDispatcher.doDeath(LoadedApk.java:1115)
      07-28 03:15:47.845: W/InputMethodManagerService(374): at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1129)
      07-28 03:15:47.845: W/InputMethodManagerService(374): at android.os.Handler.handleCallback(Handler.java:733)
      07-28 03:15:47.845: W/InputMethodManagerService(374): at android.os.Handler.dispatchMessage(Handler.java:95)
      07-28 03:15:47.845: W/InputMethodManagerService(374): at android.os.Looper.loop(Looper.java:137)
      07-28 03:15:47.845: W/InputMethodManagerService(374): at com.android.server.ServerThread.initAndLoop(SystemServer.java:1074)

      Delete
    3. Hi Santoshi, Sorry for late reply. Did you solve the exception?

      Delete
  4. hi i have problem getPropertyAsString

    ReplyDelete
    Replies
    1. Pls specify your problem or post the error.

      Delete
    2. i mention my error in your blog please help me

      Delete
  5. responseanyType{schema=anyType{element=anyType{complexType=anyType{choice=anyType{element=anyType{complexType=anyType{sequence=anyType{element=anyType{}; element=anyType{}; }; }; }; element=anyType{complexType=anyType{sequence=anyType{element=anyType{}; element=anyType{}; }; }; }; }; }; }; }; diffgram=anyType{NewDataSet=anyType{Table=anyType{DocNo=0; Name=Select; }; Table=anyType{DocNo=1; Name=Customer; }; Table=anyType{DocNo=2; Name=Employee; }; Table1=anyType{DocNo=0; Name=Select; }; Table1=anyType{DocNo=1; Name=RAMRAJ HANDLOOMS; }; Table1=anyType{DocNo=2; Name=R AND R TEXTILE; }; }; }; }

    ReplyDelete
  6. This comment has been removed by the author.

    ReplyDelete
  7. i have 2 spinner the webservice value (0,1,2) 0 means select,1 means customer,2 means Employee this value set to spinner

    ReplyDelete

  8. This is my webservice

    POST /MobileApps/Service.asmx HTTP/1.1
    Host: 192.168.1.44
    Content-Type: text/xml; charset=utf-8
    Content-Length: length
    SOAPAction: "http://tempuri.org/UserLoginDataSet"






    ReplyDelete
  9. Great tutorials Thanks,Yashwanth Chinnadurai

    im my out put all values set in single spinner
    Example:
    {"UserType": [{"DocNo":"0","Name":"Select"},{"DocNo":"1","Name":"Customer"},{"DocNo":"2","Name":"Employee"}]}
    its displays in one line display all items but i need
    Select
    Customer
    Employee

    ReplyDelete
    Replies
    1. This is the JSON response type. You need to get those data using JSONObject and JSONArray with the TAG names.

      Check this link to parse JSON
      http://stackoverflow.com/questions/17136769/how-to-parse-jsonarray-in-android

      Delete
  10. Hello sir i have a spinner and i get data from the soap but it is in this type of format:
    anyType{DocumentElement=anyType{CompanyList=anyType{C_ID=1;C_Name=***.;

    actually i want only id or Name so how can i get it please help me

    ReplyDelete