填充微调使用字符串值由SOAP的Web服务返回 [英] Populating Spinner using string values returned by SOAP web service
问题描述
我工作的是Android code返回,我存储在一个字符串我的字符串值array.I想用这个字符串数组来填充我的纱厂之一。
我的主要目的是,这取决于用户在第一次微调选择,我想用我的字符串数组来填充我的第二微调。
然而,当我尝试我还是得到了当我填充适配器一个NullPointerException异常
块引用>我的Android code:
公共类标记2扩展活动
{
私有静态最后弦乐SOAP_ACTION =http://tempuri.org/getData;
私有静态最后弦乐METHOD_NAME =的getData;
私有静态最后弦乐NAMESPACE =http://tempuri.org/;
私有静态最终字符串URL =http://10.0.2.2/getsubject/Service1.asmx;
私人微调S;
私人微调S2;
私人微调S3;@覆盖
保护无效的onCreate(捆绑savedInstanceState)
{
super.onCreate(savedInstanceState); 的setContentView(R.layout.mainspinner); S =(微调)findViewById(R.id.spinner1);
S2 =(微调)findViewById(R.id.spinner2);
的String [] = myList4()的调用;
的for(int i = 0; I< myList4.length;我++)
的System.out.println(myList4 [I]); 的String [] myList中=新的String [] {上半场,下半场};
的String [] = myList2新的String [] {
ABC,
GHF
IJK
}; 的String [] = myList3新的String [] {
约翰,
安
乔, }; s.setAdapter(新ArrayAdapter<串GT;(这一点,android.R.layout.simple_spinner_item,myList中));
s2.setAdapter(新ArrayAdapter<串GT;(这一点,android.R.layout.simple_spinner_item,myList2));
最后ArrayAdapter<串GT;适配器3 =新ArrayAdapter<串GT;(这一点,android.R.layout.simple_spinner_item,myList4);
最后ArrayAdapter<串GT;适配器2 =新ArrayAdapter<串GT;(这一点,android.R.layout.simple_spinner_item,myList3);
s.setOnItemSelectedListener(新OnItemSelectedListener()
{ @覆盖
公共无效onItemSelected(适配器视图<>母公司,视图V,INT POS,长ID)
{ 如果(parent.getItemAtPosition(POS)的ToString()。equalsIgnoreCase(上半场))
{
s2.setSelection(POS)
s3.setAdapter(适配器3);
}
其他
{
s2.setAdapter(适配器2);
s2.setSelection(POS)
} } @覆盖
公共无效onNothingSelected(适配器视图<>为arg0){
}});
}公众的String []()调用
{
SoapPrimitive responsesData = NULL; SoapObject要求=新SoapObject空间(namespace,METHOD_NAME); SoapSerializationEnvelope信封=新SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = TRUE;
envelope.setOutputSoapObject(请求); HttpTransportSE androidHttpTransport =新HttpTransportSE(URL); androidHttpTransport.debug = TRUE; 尝试{ androidHttpTransport.call(SOAP_ACTION,信封); responsesData =(SoapPrimitive)envelope.getResponse();
的System.out.println(---响应----+ responsesData); }赶上(SocketException前){
ex.printStackTrace();
}赶上(例外五){
e.printStackTrace();
} 的System.out.println(----+ responsesData); 串serviceResponse = responsesData的ToString();
的String []温度;
字符串分隔符=#;
TEMP = serviceResponse.split(分隔符);
的System.out.println(---- ----长+ temp.length); 返回温度;
}
}我的logcat的:
15 11-17:51:09.668:DEBUG / dalvikvm(125):GC_EXPLICIT释放在164ms 1220对象/ 68272字节
11-17 16:20:29.649:ERROR / AndroidRuntime(620):显示java.lang.NullPointerException
11-17 16:20:29.649:ERROR / AndroidRuntime(620):在com.example.Mark2 $ 1.onItemSelected(Mark2.java:88)
11-17 16:20:29.649:ERROR / AndroidRuntime(620):在android.widget.AdapterView.fireOnSelected(AdapterView.java:864)
11-17 16:20:29.649:ERROR / AndroidRuntime(620):在android.widget.AdapterView.access $ 200(AdapterView.java:42)
11-17 16:20:29.649:ERROR / AndroidRuntime(620):在android.widget.AdapterView $ SelectionNotifier.run(AdapterView.java:830)
11-17 16:20:29.649:ERROR / AndroidRuntime(620):在android.os.Handler.handleCallback(Handler.java:587)
11-17 16:20:29.649:ERROR / AndroidRuntime(620):在android.os.Handler.dispatchMessage(Handler.java:92)
编辑:行号:88是s3.setAdapter(适配器3);
块引用>解决方案
NullPointerException异常
当对象之一为空,你要使用它发生。从你的code,我发现你没有初始化
的S3微调
。您刚才忘了补充:
S3 =(微调)findViewById(R.id.spinner3);
I am working on a Android code that returns me String values that I store in a String array.I want to use this String array to populate one of my Spinners.
My main intention is that depending on what the user selects in 1st spinner , I want to populate my 2nd spinner using my String array.
However, when I try I am getting a NullPointerException even when I am populating the adapter
My Android code:
public class Mark2 extends Activity { private static final String SOAP_ACTION = "http://tempuri.org/getData"; private static final String METHOD_NAME = "getData"; private static final String NAMESPACE = "http://tempuri.org/"; private static final String URL = "http://10.0.2.2/getsubject/Service1.asmx"; private Spinner s; private Spinner s2; private Spinner s3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mainspinner); s = (Spinner) findViewById(R.id.spinner1); s2 = (Spinner) findViewById(R.id.spinner2); String[] myList4=call(); for(int i=0;i<myList4.length;i++) System.out.println(myList4[i]); String[] myList = new String[] {"First half","Second Half"}; String[] myList2=new String[] { "abc", "ghf", "ijk", }; String[] myList3=new String[] { "john", "ann", "joe", }; s.setAdapter(new ArrayAdapter<String> (this,android.R.layout.simple_spinner_item, myList)); s2.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, myList2)); final ArrayAdapter<String> adapter3 = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, myList4); final ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, myList3); s.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View v,int pos, long id) { if(parent.getItemAtPosition(pos).toString().equalsIgnoreCase("First half")) { s2.setSelection(pos); s3.setAdapter(adapter3); } else { s2.setAdapter(adapter2); s2.setSelection(pos); } } @Override public void onNothingSelected(AdapterView<?> arg0) { }}); } public String[] call() { SoapPrimitive responsesData = 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); androidHttpTransport.debug = true; try { androidHttpTransport.call(SOAP_ACTION, envelope); responsesData = (SoapPrimitive) envelope.getResponse(); System.out.println(" --- response ---- " + responsesData); } catch (SocketException ex) { ex.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } System.out.println( " ----" + responsesData ); String serviceResponse= responsesData .toString(); String[] temp; String delimiter = "#"; temp= serviceResponse.split(delimiter); System.out.println( " ---- length ---- " + temp.length); return temp; } }
My logcat:
11-17 15:51:09.668: DEBUG/dalvikvm(125): GC_EXPLICIT freed 1220 objects / 68272 bytes in 164ms 11-17 16:20:29.649: ERROR/AndroidRuntime(620): java.lang.NullPointerException 11-17 16:20:29.649: ERROR/AndroidRuntime(620): at com.example.Mark2$1.onItemSelected(Mark2.java:88) 11-17 16:20:29.649: ERROR/AndroidRuntime(620): at android.widget.AdapterView.fireOnSelected(AdapterView.java:864) 11-17 16:20:29.649: ERROR/AndroidRuntime(620): at android.widget.AdapterView.access$200(AdapterView.java:42) 11-17 16:20:29.649: ERROR/AndroidRuntime(620): at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:830) 11-17 16:20:29.649: ERROR/AndroidRuntime(620): at android.os.Handler.handleCallback(Handler.java:587) 11-17 16:20:29.649: ERROR/AndroidRuntime(620): at android.os.Handler.dispatchMessage(Handler.java:92)
Edit: Line no: 88 is s3.setAdapter(adapter3);
解决方案
NullPointerException
occurs when one of the object is null and you are trying to use it.From your code i found that you have not initialized s3 of
Spinner
.You just forgot to add :
s3 = (Spinner) findViewById(R.id.spinner3);
这篇关于填充微调使用字符串值由SOAP的Web服务返回的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!