2011-04-01 23 views
0

我試圖使用薩克斯解析器來解析HTTP響應。除了程序沒有進入我的for循環之外,一切似乎都正常工作。這裏是我的代碼:薩克斯解析器循環中的錯誤

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.playerinfo); 

    TableLayout t1 = (TableLayout) findViewById(R.id.myTable); 

    Intent i = getIntent(); 
    Bundle b = i.getExtras(); 
    final String str = b.getString("ARRIVING_FROM"); 

    d=d+""; 
    d = tryLogin(str); 
    System.out.println("Value of D"+d.substring(0, 1)); 

    this.tryLogin(str); 

    final ScoreList scorelist = XMLHandler.scorelist ; 

    id = new TextView[scorelist.getName().size()]; 
    name = new TextView[scorelist.getName().size()]; 

    for (int j = 0; j < scorelist.getName().size(); j++) { 
     TableRow tr = new TableRow(this); 

     id[j]= new TextView(this); 
     id[j].setText(scorelist.getId().get(j)); 
     id[j].setTextColor(Color.WHITE); 
     id[j].setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); 
     tr.addView(id[j]); 

     name[j]= new TextView(this); 
     name[j].setText(scorelist.getName().get(j)); 
     name[j].setTextColor(Color.WHITE); 
     name[j].setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); 
     tr.addView(name[j]); 

     t1.addView(tr, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); 
    } 
} 

protected String tryLogin(String str) { 
    DefaultHttpClient client = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost("http://ip address/test/players_detail.php?id="+str); 
    List<BasicNameValuePair> nvps = new ArrayList<BasicNameValuePair>(); 
    nvps.add(new BasicNameValuePair("id", str)); 

    try { 
     UrlEncodedFormEntity p_entity = new UrlEncodedFormEntity(nvps,HTTP.UTF_8); 
     httppost.setEntity(p_entity); 
     HttpResponse response = client.execute(httppost); 
     Log.v("MyPlayerInfo", response.getStatusLine().toString()); 
     HttpEntity responseEntity = response.getEntity(); 
     InputStream in=responseEntity.getContent(); 
     byte[] bData = new byte[1024]; 
     in.read(bData); 
     System.out.println("In Data"+in.toString()); 
     String st=new String (bData); 
     d=st; 
     System.out.println("Response String from server"+st); 
     Log.v("MyPlayerInfo", "Set response to responseEntity"); 

     SAXParserFactory spf = SAXParserFactory.newInstance(); 
     SAXParser sp = spf.newSAXParser(); 
     XMLReader xr = sp.getXMLReader(); 

     System.out.println("Response from server"+responseEntity); 
     XMLHandler myXMLHandler = new XMLHandler(); 
     xr.setContentHandler(myXMLHandler); 
     xr.parse(retrieveInputStream(responseEntity)); 

     System.out.println("Server Response"+responseEntity); 
     return d; 
    } catch(Exception e) { 
     Log.i("Catch","Exception generate in Post"+e); 
     e.printStackTrace(); 
    } 

    return "0"; 
} 

private InputSource retrieveInputStream(HttpEntity httpEntity) { 
    InputSource insrc = (InputSource) httpEntity; 

    try { 
     insrc = new InputSource(httpEntity.getContent()); 
    } catch (Exception e) {} 

    return insrc; 
} 

而且logcat的迴應是:

04-01 12:04:21.746: ERROR/AndroidRuntime(808): FATAL EXCEPTION: main 
04-01 12:04:21.746: ERROR/AndroidRuntime(808): java.lang.RuntimeException: Unable to start activity ComponentInfo{android.example/android.example.MyPlayerInfo}: java.lang.NullPointerException 
04-01 12:04:21.746: ERROR/AndroidRuntime(808):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
04-01 12:04:21.746: ERROR/AndroidRuntime(808):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
04-01 12:04:21.746: ERROR/AndroidRuntime(808):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
04-01 12:04:21.746: ERROR/AndroidRuntime(808):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
04-01 12:04:21.746: ERROR/AndroidRuntime(808):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-01 12:04:21.746: ERROR/AndroidRuntime(808):  at android.os.Looper.loop(Looper.java:123) 
04-01 12:04:21.746: ERROR/AndroidRuntime(808):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
04-01 12:04:21.746: ERROR/AndroidRuntime(808):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-01 12:04:21.746: ERROR/AndroidRuntime(808):  at java.lang.reflect.Method.invoke(Method.java:521) 
04-01 12:04:21.746: ERROR/AndroidRuntime(808):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
04-01 12:04:21.746: ERROR/AndroidRuntime(808):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
04-01 12:04:21.746: ERROR/AndroidRuntime(808):  at dalvik.system.NativeStart.main(Native Method) 
04-01 12:04:21.746: ERROR/AndroidRuntime(808): Caused by: java.lang.NullPointerException 
04-01 12:04:21.746: ERROR/AndroidRuntime(808):  at android.example.MyPlayerInfo.onCreate(MyPlayerInfo.java:67) 
04-01 12:04:21.746: ERROR/AndroidRuntime(808):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
04-01 12:04:21.746: ERROR/AndroidRuntime(808):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
04-01 12:04:21.756: WARN/ActivityManager(59): Force finishing activity android.example/.MyPlayerInfo 
04-01 12:04:21.766: WARN/ActivityManager(59): Force finishing activity android.example/.MyParsingExample 
04-01 12:04:22.266: WARN/ActivityManager(59): Activity pause timeout for HistoryRecord{43ff6188 android.example/.MyPlayerInfo} 

回答

1

好了,你有在MyPlayerInfo.java的67線一個NullPointerException。看看那條線,找出你爲什麼得到這個例外,並修正它。

不知道這行是第67,它的棘手進一步幫助 - 你已經提出了很多代碼看,並我們不知道它的突破,但應該。

在行(順便說一句,你應該在finally塊關閉輸入流,只有捕獲更具體的異常,但一件事一時間......)

+0

它給錯誤在哪裏聲明ID並在得分scorelist行後名稱... n我沒有得到它產生異常b'z的地方當我運行解析代碼沒有http它的正常工作 – Sam 2011-04-01 06:54:31

+0

@Sam:這表明無論'scorelist'爲null或'scorelist。 getName()'爲null。添加日誌記錄來找出哪些,然後跟蹤爲什麼是這種情況。 – 2011-04-01 06:55:55