我遇到parseInt()
的问题,它会抛出错误:无法将'null'解析为整数,我的ViewFlipper
也无效。这是我的活动:
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.ViewFlipper;
import xml.parser.dataset;
public class XmlParserActivity extends Activity implements OnClickListener {
private final String MY_DEBUG_TAG = "WeatherForcaster";
// private dataset myDataSet;
private LinearLayout layout;
private int temp= 0;
/** Called when the activity is first created. */
//the ViewSwitcher
private Button btn;
private ViewFlipper flip;
// private TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
layout=(LinearLayout)findViewById(R.id.linearlayout1);
btn=(Button)findViewById(R.id.btn);
btn.setOnClickListener(this);
flip=(ViewFlipper)findViewById(R.id.flip);
//when a view is displayed
flip.setInAnimation(this,android.R.anim.fade_in);
//when a view disappears
flip.setOutAnimation(this, android.R.anim.fade_out);
// String postcode = null;
// public String getPostcode {
// return postcode;
// }
//URL newUrl = c;
// myweather.setText(c.toString());
/* Create a new TextView to display the parsingresult later. */
TextView tv = new TextView(this);
// run(0);
//WeatherApplicationActivity postcode = new WeatherApplicationActivity();
try {
/* Create a URL we want to load some xml-data from. */
URL url = new URL("http://new.myweather2.com/developer/forecast.ashx?uac=gcV3ynNdoV&output=xml&query=G41");
//String url = new String("http://new.myweather2.com/developer/forecast.ashx?uac=gcV3ynNdoV&output=xml&query="+WeatherApplicationActivity.postcode );
//URL url = new URL(url);
//url.toString( );
//myString(url.toString() + WeatherApplicationActivity.getString(postcode));
// url + WeatherApplicationActivity.getString(postcode);
/* Get a SAXParser from the SAXPArserFactory. */
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
/* Get the XMLReader of the SAXParser we created. */
XMLReader xr = sp.getXMLReader();
/* Create a new ContentHandler and apply it to the XML-Reader*/
handler myHandler = new handler();
xr.setContentHandler(myHandler);
/* Parse the xml-data from our URL. */
xr.parse(new InputSource(url.openStream()));
/* Parsing has finished. */
/* Our ExampleHandler now provides the parsed data to us. */
dataset parsedDataSet =
myHandler.getParsedData();
/* Set the result to be displayed in our GUI. */
tv.setText(parsedDataSet.toString());
} catch (Exception e) {
/* Display any Error to the GUI. */
tv.setText("Error: " + e.getMessage());
Log.e(MY_DEBUG_TAG, "WeatherQueryError", e);
}
temp = Integer.parseInt(xml.parser.dataset.getTemp());
if(temp <0){
//layout.setBackgroundColor(Color.BLUE);
//layout.setBackgroundColor(getResources().getColor(R.color.silver));
findViewById(R.id.flip).setBackgroundColor(Color.BLUE);
}
else if(temp > 0 && temp < 9)
{
//layout.setBackgroundColor(Color.GREEN);
//layout.setBackgroundColor(getResources().getColor(R.color.silver));
findViewById(R.id.flip).setBackgroundColor(Color.GREEN);
}
else
{
//layout.setBackgroundColor(Color.YELLOW);
//layout.setBackgroundColor(getResources().getColor(R.color.silver));
findViewById(R.id.flip).setBackgroundColor(Color.YELLOW);
}
/* Display the TextView. */
this.setContentView(tv);
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub onClick(View arg0) {
// TODO Auto-generated method stub
flip.showNext();
//specify flipping interval
//flip.setFlipInterval(1000);
//flip.startFlipping();
}
}
这是我的dataset
:
package xml.parser;
public class dataset {
static String temp = null;
// private int extractedInt = 0;
public static String getTemp() {
return temp;
}
public void setTemp(String temp) {
this.temp = temp;
}
这是我的经纪人:
public void characters(char ch[], int start, int length) {
if(this.in_temp){
String setTemp = new String(ch, start, length);
// myParsedDataSet.setTempUnit(new String(ch, start, length));
// myParsedDataSet.setTemp;
}
对于dataset
和处理程序,我只粘贴了涉及temp
的代码,因为我知道它们在我取出if语句时起作用。然而,即便如此,我ViewFlipper
也无法工作。
这是我的main.xml
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/linearlayout1"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="25dip"
android:text="Flip Example"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="25dip"
android:id="@+id/tv"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25dip"
android:text="Flip"
android:id="@+id/btn"
android:onClick="ClickHandler"
/>
<ViewFlipper
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/flip">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="25dip"
android:text="Item1a"
/>
</LinearLayout>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="25dip"
android:id="@+id/tv2"
/>
</ViewFlipper>
</LinearLayout>
这是我的Logcat
:
04-01 18:02:24.744: E/AndroidRuntime(7331): FATAL EXCEPTION: main
04-01 18:02:24.744: E/AndroidRuntime(7331): java.lang.RuntimeException: Unable to start activity ComponentInfo{xml.parser/xml.parser.XmlParserActivity}: java.lang.NumberFormatException: unable to parse 'null' as integer
04-01 18:02:24.744: E/AndroidRuntime(7331): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1830)
04-01 18:02:24.744: E/AndroidRuntime(7331): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1851)
04-01 18:02:24.744: E/AndroidRuntime(7331): at android.app.ActivityThread.access$1500(ActivityThread.java:132)
04-01 18:02:24.744: E/AndroidRuntime(7331): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
04-01 18:02:24.744: E/AndroidRuntime(7331): at android.os.Handler.dispatchMessage(Handler.java:99)
04-01 18:02:24.744: E/AndroidRuntime(7331): at android.os.Looper.loop(Looper.java:150)
04-01 18:02:24.744: E/AndroidRuntime(7331): at android.app.ActivityThread.main(ActivityThread.java:4293)
04-01 18:02:24.744: E/AndroidRuntime(7331): at java.lang.reflect.Method.invokeNative(Native Method)
04-01 18:02:24.744: E/AndroidRuntime(7331): at java.lang.reflect.Method.invoke(Method.java:507)
04-01 18:02:24.744: E/AndroidRuntime(7331): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
04-01 18:02:24.744: E/AndroidRuntime(7331): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
04-01 18:02:24.744: E/AndroidRuntime(7331): at dalvik.system.NativeStart.main(Native Method)
04-01 18:02:24.744: E/AndroidRuntime(7331): Caused by: java.lang.NumberFormatException: unable to parse 'null' as integer
04-01 18:02:24.744: E/AndroidRuntime(7331): at java.lang.Integer.parseInt(Integer.java:356)
04-01 18:02:24.744: E/AndroidRuntime(7331): at java.lang.Integer.parseInt(Integer.java:332)
04-01 18:02:24.744: E/AndroidRuntime(7331): at xml.parser.XmlParserActivity.onCreate(XmlParserActivity.java:118)
04-01 18:02:24.744: E/AndroidRuntime(7331): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
04-01 18:02:24.744: E/AndroidRuntime(7331): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1794)
答案 0 :(得分:1)
现在你正在尝试解析为int
null
字符串(你正在调用dataset
的静态方法,它将返回null
,因为该对象它返回(temp
)设置为null
)。您可能希望将int
解析为xml解析的结果,而不是:
temp = Integer.parseInt(xml.parser.dataset.getTemp());
使用parsedDataSet
变量:
temp = Integer.parseInt(parsedDataSet.getTemp());
示例:
//....
dataset parsedDataSet;
try {
URL url = new URL(
"http://new.myweather2.com/developer/forecast.ashx?uac=gcV3ynNdoV&output=xml&query=G41");
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
handler myHandler = new handler();
xr.setContentHandler(myHandler);
xr.parse(new InputSource(url.openStream()));
parsedDataSet = myHandler.getParsedData();
tv.setText(parsedDataSet.toString());
} catch (Exception e) {
tv.setText("Error: " + e.getMessage());
Log.e(MY_DEBUG_TAG, "WeatherQueryError", e);
}
temp = Integer.parseInt(parsedDataSet.getTemp());
//...
此外,我在您的代码中看到了其他错误:
- 在xml解析器中,您是否实际在结果中设置了解析后的字符串?
// I guess that myParsedDataSet is another dataset object that you return with
// myHandler.getParsedData(), do you set the temp variable in that class?? // myParsedDataSet.setTemp(setTemp);
if(this.in_temp){
String setTemp = new String(ch, start, length);
// myParsedDataSet.setTempUnit(new String(ch, start, length));
// myParsedDataSet.setTemp;
}
- 你解析xml,检查parseInt
的值,然后用this.setContentView(tv);
替换活动的主要布局?!
答案 1 :(得分:1)
检查你的parseddatadset
是否为空,如果是,则在将其作为整数传递之前在字符串中添加“0”。
可以按如下方式实施 -
String checknull=parseddataset.toString();
if(checknull.length()==0)
checknull += "0";
我建议使用boolean
变量,如果它导致false(!= 0),那么只解析它,否则你知道它的parseddataset是空的。在你使用的情况下{{1检查它的长度是否为0,如果为false则解析。