I have a problem with parseInt(), it throws the error: unable to parse ‘null’ as integer, also my ViewFlipper isn’t working. Here is my activity:
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();
}
}
This is my 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;
}
This is my handler:
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;
}
For the dataset and handler I only pasted the code that involves the temp as I know they work when I take out the if statement. However even then my ViewFlipper wont work.
This is my 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>
This is my 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)
Right now you’re trying to parse as an
intanullString(you are calling the static method fromdatasetthat will returnnull, because the object it returns(temp) is set tonull). You probably want to parse as anintthe result of the xml parsing, so instead of :use the
parsedDataSetvariable:Example:
Also I see other errors in your code:
-In the xml parser, do you actually set the parsed String in the result?
-Also you parse the xml, check the value from
parseIntand then replace the main layout of the activity withthis.setContentView(tv);?!