2012-10-24 189 views
0

我有以下json解析器。Android應用程序在調試器中運行,但不在運行模式下

public class JSONParserThreaded extends AsyncTask<String, Integer, String> 
{ 
    static InputStream is = null; 
    static JSONObject jObj = null; 
    static String json = ""; 

    JSONObject processedjObj =null; 

    JSONParserThreaded() 
    { 

    } 

    @Override 
    protected String doInBackground(String... params) 
    { 
     // TODO Auto-generated method stub 
     String url = params[0]; 
     try 
     { 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(url); 

      HttpResponse httpResponse = httpClient.execute(httpPost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      is = httpEntity.getContent(); 
     } 
     catch (UnsupportedEncodingException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (ClientProtocolException e) 
     { 
      e.printStackTrace(); 
     } catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 

     try 
     { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) 
      { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      json = sb.toString(); 

     } 
     catch (Exception e) 
     { 
      Log.e("Buffer Error", "Error converting result " + e.toString()); 
     } 

     // try parse the string to a JSON object 
     try 
     { 
      jObj = new JSONObject(json); 
      setJSONObject(jObj); 

     } 
     catch (JSONException e) 
     { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 

     // return JSON String 

     return "Sucess"; 
    } 

    void setJSONObject(JSONObject jObject) 
    { 
     processedjObj = jObject; 
    } 

    JSONObject returnJSONObject() 
    { 
     return processedjObj; 
    } 

    @Override 
    protected void onPostExecute(String result) 
    { 
     super.onPostExecute(result); 

    } 
} 

我使用的解析器在下面的代碼

public class CategoryScreenActivity extends Activity 
{ 
    private static String url = "http://www.network.com/store/getCategories.php"; 

    static final String TAG_CATEGORY = "categories"; 
    static final String TAG_CATEGORY_NAME = "name"; 
    static final String TAG_CATEGORY_ID = "id"; 
    static final String TAG_CATEGORY_THUMBNAIL_URL = "thumbnail"; 
    static final String TAG_CATEGORY_IMAGE_MEDIUM_URL = "image_medium"; 
    static final String TAG_CATEGORY_IMAGE_LARGE_URL = "image_large"; 

    JSONArray categories = null; 
    JSONObject wholeCategory = null; 

    ListView mainListView; 
    ListAdpater adapter; 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 


     super.onCreate(savedInstanceState); 
     setContentView(R.layout.list_view); 

     ArrayList<HashMap<String, String>> categoryList = new ArrayList<HashMap<String, String>>(); 

     /*JSONParser jParser = new JSONParser(); 

     JSONObject json = jParser.getJSONFromURL(url);*/ 

     JSONParserThreaded jParserThread = new JSONParserThreaded(); 
     jParserThread.execute(url); 

     try 
     { 
      //Getting Array of Categories 
      wholeCategory = jParserThread.returnJSONObject(); 
      => categories = wholeCategory.getJSONArray(TAG_CATEGORY); <= 



      for(int i=0; i < categories.length(); i++) 
      { 
       JSONObject c = categories.getJSONObject(i); 

       String cname = c.getString(TAG_CATEGORY_NAME); 
       String cid = c.getString(TAG_CATEGORY_ID); 
       String cThumbNailWithBackSlash = c.getString(TAG_CATEGORY_THUMBNAIL_URL); 
       String cImageMediumWithBackSlash = c.getString(TAG_CATEGORY_IMAGE_MEDIUM_URL); 
       String cImageLargeWithBackSLash = c.getString(TAG_CATEGORY_IMAGE_LARGE_URL); 

       HashMap<String, String> categoryMap = new HashMap<String, String>(); 

       categoryMap.put(TAG_CATEGORY_ID,cid); 
       categoryMap.put(TAG_CATEGORY_NAME, cname); 
       categoryMap.put(TAG_CATEGORY_THUMBNAIL_URL, cThumbNailWithBackSlash); 
       categoryMap.put(TAG_CATEGORY_IMAGE_MEDIUM_URL,cImageMediumWithBackSlash); 
       categoryMap.put(TAG_CATEGORY_IMAGE_LARGE_URL,cImageLargeWithBackSLash); 

       categoryList.add(categoryMap); 
      } 
     } 
     catch(JSONException e) 
     { 
      e.printStackTrace(); 
     } 
     mainListView = (ListView)findViewById(R.id.list); 
     adapter = new ListAdpater(this, categoryList); 
     mainListView.setAdapter(adapter); 
    } 


} 

空指針異常正在從由包圍的線拋出「=> < =」 該應用程序正常工作在調試模式下,但不是當我運行它。任何人都可以請幫我嗎?

我在下面添加了堆棧跟蹤。

enter image description here

+0

這很奇怪。發佈堆棧跟蹤 –

+0

@ WebnetMobile.com我已將堆棧跟蹤添加到我的帖子中。 –

+1

由於某種原因'wholeCategory'爲空。你需要進入'jParserThread.returnJSONObject();'看看爲什麼會發生這種情況。 –

回答

1

你有你的網絡委託給AsyncTaskIntentService。在UI線程上進行聯網是錯誤的。

請閱讀有關該主題的this article。這裏是AsyncTask tutorial

+0

我現在已經使用異步。我編輯了我的舊帖子以顯示不同類型的問題。 –

+0

我改變了代碼,因此解決了這個問題。 –

相關問題