2013-02-26 85 views
0

我無法使用JSON數組,我真的希望有人能夠幫助我。無效值的Json數組

可以說我有一個JSON數據類,我正在向另一個活動發送「intent putextra」。

如何在將空值發送給其他活動之前更改空值?我做了幾個打印到發現空值和它們是不同的,例如:

Monday : null 
Tuesday : 08:30 - 18:00 
Wednesday : 09:00 - 17:00 

**and so on.** 

問題是 - >我都JSON數據,我把它們解析到的對象,但我想之前「intent.putextra」和其他活動找到空給他們,並取代它們「關閉」

所以它看起來像

Monday : Closed 
Tuesday : 08:30 - 18:00 
Wednesday : 09:00 - 17:00 

編輯

public class LocationBased extends ListActivity{ 

// JSON Node names 
private static final String TAG_Location = "location_id"; 
private static final String TAG_Company = "company_id"; 
private static final String TAG_NAME = "name"; 
private static final String TAG_ADDRESS = "address"; 
private static final String TAG_PLACE = "place"; 
private static final String TAG_POSTAL = "postal"; 
private static final String TAG_CITY = "city"; 
private static final String TAG_MONDAY = "monday"; 
private static final String TAG_TUESDAY = "tuesday"; 
private static final String TAG_WEDNESDAY = "wednesday"; 
private static final String TAG_THURSDAY = "thursday"; 
private static final String TAG_FRIDAY = "friday"; 
private static final String TAG_SATURDAY = "saturday"; 
private static final String TAG_SUNDAY = "sunday"; 
private static final String TAG_TYPE = "type"; 
private static final String TAG_LAT = "lat"; 
private static final String TAG_LNG = "lng"; 
private static final String TAG_NOCAR = "nocar"; 
private static final String TAG = "Debug of Project"; // 

private String a; 
private String b; 



@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    SQLiteDatabase db = openOrCreateDatabase("mydb.db", Context.MODE_PRIVATE, null); 
    db.execSQL("CREATE TABLE IF NOT EXISTS gps_kordinater (ID INTEGER PRIMARY KEY AUTOINCREMENT, Latitude REAL, Longitude REAL);"); 

    String query = "SELECT Latitude,Longitude FROM gps_kordinater WHERE Id = (SELECT MAX(Id) FROM gps_kordinater)"; 
    Cursor cursor = db.rawQuery(query, null); 
    if(cursor != null) 
    { 
    cursor.moveToFirst(); 
    a = cursor.getString(0); 
    b = cursor.getString(1); 
    } 

    String url = "http://webservice.XXX.XX/webservice/getLocationList.php?lat="+ a +"&lng="+ b +""; 

    Log.d(TAG, "Leyth URL = Lat : " + a +"  Long : " + b); 


    // now enabled if disabled = ingen support for jb aka 4.0 
    if (android.os.Build.VERSION.SDK_INT > 9) { 
      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 
    } 



    ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>(); 
    JSONParser jParser = new JSONParser(); 
    JSONArray json = jParser.getJSONFromUrl(url); 
    try { 
      for(int i = 0; i < json.length(); i++){ 
       JSONObject c = json.getJSONObject(i); 

      String location_id = c.getString(TAG_Location); 
      String company_id = c.getString(TAG_Company); 
      String name = c.getString(TAG_NAME); 
      String address = c.getString(TAG_ADDRESS); 
      String place = c.getString(TAG_PLACE); 
      String postal = c.getString(TAG_POSTAL); 
      String city = c.getString(TAG_CITY); 
      String monday = c.getString(TAG_MONDAY); 
      String tuesday = c.getString(TAG_TUESDAY); 
      String wednesday = c.getString(TAG_WEDNESDAY); 
      String thursday = c.getString(TAG_THURSDAY); 
      String friday = c.getString(TAG_FRIDAY); 
      String saturday = c.getString(TAG_SATURDAY); 
      String sunday = c.getString(TAG_SUNDAY); 
      String type = c.getString(TAG_TYPE); 
      String lat = c.getString(TAG_LAT); 
      String lng = c.getString(TAG_LNG); 
      String nocar = c.getString(TAG_NOCAR); 


     // creating new HashMap 
      HashMap<String, String> map = new HashMap<String, String>(); 

      // adding each child node to HashMap key => value 
      map.put(TAG_Location, location_id); 
      map.put(TAG_Company, company_id); 
      map.put(TAG_NAME, name); 
      map.put(TAG_ADDRESS, address); 
      map.put(TAG_PLACE, place); 
      map.put(TAG_POSTAL, postal); 
      map.put(TAG_CITY, city); 
      map.put(TAG_MONDAY, monday); 
      map.put(TAG_TUESDAY, tuesday); 
      map.put(TAG_WEDNESDAY, wednesday); 
      map.put(TAG_THURSDAY, thursday); 
      map.put(TAG_FRIDAY, friday); 
      map.put(TAG_SATURDAY, saturday); 
      map.put(TAG_SUNDAY, sunday); 
      map.put(TAG_TYPE, type); 
      map.put(TAG_LAT, lat); 
      map.put(TAG_LNG, lng); 
      map.put(TAG_NOCAR, nocar); 

     // Log.d(TAG, "Leyth Days = Mandag : " + monday +"  Onsdag : " + wednesday); 


       // adding HashList to ArrayList 
      contactList.add(map); 
      } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
     Log.e("JSON Parser", "Error parsing data " + e.toString()); 

    } 
    /** 
    * Updating parsed JSON data into ListView 
    * */ 
    ListAdapter adapter = new SimpleAdapter(this, contactList, 
      R.layout.list_item, 
      new String[] { TAG_LAT, TAG_LNG, TAG_POSTAL }, new int[] { 
        R.id.name, R.id.email, R.id.mobile }); 
    setListAdapter(adapter); 

    // selecting single ListView item 
    ListView lv = getListView(); 

    // Launching new screen on Selecting Single ListItem 
    lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      // getting values from selected ListItem 
      String name = ((TextView) view.findViewById(R.id.name)).getText().toString(); 
      String cost = ((TextView) view.findViewById(R.id.email)).getText().toString(); 

      String description = ((TextView) view.findViewById(R.id.mobile)).getText().toString(); 

      String mandag = ((TextView) view.findViewById(R.id.mandag)).getText().toString(); 
      String tirsdag = ((TextView) view.findViewById(R.id.tirsdag)).getText().toString(); 
      String onsdag = ((TextView) view.findViewById(R.id.onsdag)).getText().toString(); 
      String torsdag = ((TextView) view.findViewById(R.id.torsdag)).getText().toString(); 
      String fredag = ((TextView) view.findViewById(R.id.fredag)).getText().toString(); 
      String lordag = ((TextView) view.findViewById(R.id.lordag)).getText().toString(); 
      String sondag = ((TextView) view.findViewById(R.id.sondag)).getText().toString(); 




      // Starting new intent 
      Intent in = new Intent(getApplicationContext(), dk.mitaffald.maps.MainActivity.class); 
      in.putExtra(TAG_LAT, name); 
      in.putExtra(TAG_LNG, cost); 
      in.putExtra(TAG_Company, description); 

      in.putExtra(TAG_MONDAY, mandag); 
      in.putExtra(TAG_TUESDAY, tirsdag); 
      in.putExtra(TAG_WEDNESDAY, onsdag); 
      in.putExtra(TAG_THURSDAY, torsdag); 
      in.putExtra(TAG_FRIDAY, fredag); 
      in.putExtra(TAG_SATURDAY, lordag); 
      in.putExtra(TAG_SUNDAY, sondag); 


      startActivity(in); 

     } 
    }); 
} 

}

+0

這裏有什麼更新的代碼Mr.Me – Tirolel 2013-02-26 12:04:52

+0

檢查我的回答 – Pragnani 2013-02-26 12:40:17

+0

您是否嘗試過我解...? – Pragnani 2013-02-26 13:31:30

回答

0

我也痛苦過去這個問題,但我不知道這是很好的解決方案,但它爲我工作。希望對你也有用。

String jsonObject_string ; 
try { 
       if (jsonObject != null) { 

        // ur stuff when not null 

       } 

      } catch (Exception e) { 
       // TODO: handle exception 
            // when null it automatic fill value 
       jsonObject_string = "Closed"; 
      } 
+0

此代碼在你的字符串或對象爲null後添加 – duggu 2013-02-26 12:05:18

+0

是的,但我使用數組,你認爲我仍然可以使用它? – Tirolel 2013-02-26 12:08:49

+0

這段代碼在完整的條件下運行至少對我來說,一旦你嘗試使用這段代碼。 – duggu 2013-02-26 12:10:37

0

爲什麼不嘗試替換所有JSON字符串null作爲一個字符串,解析JSON文件/對象之前?

可能的其他解決方案可能會循環檢查每個對象是否爲空。然後更換,對於Closed

編輯: 裝入JSON對象作爲字符串,然後全部更換nullClosed這樣的:

String JSON = JsonObject.toString(); 
JSON.replace("null", "Closed"); 

編輯2: 添加此下面JSONArray json = jParser.getJSONFromUrl(url);

String s = json.toString(); // converts json object to string 
json.replace("null", "Closed"); // replaces null for Closed 
JSONArray json = new JSONArray(s); // converts back to json object 
+0

Iam有點困惑,你可以試試解釋我嗎? – Tirolel 2013-02-26 12:08:26

+0

我會爲你添加一些代碼 – Dediqated 2013-02-26 12:09:15

+0

非常感謝。 – Tirolel 2013-02-26 12:10:13

0

據我所知,你想用特定的字符串替換任何空字符串,說「閉」。 這沒有任何與JSON待辦事項,如果這是我的代碼,我會做一個簡單的檢查,然後將這些值添加到我的意圖。代碼將如下所示:

  Intent in = new Intent(getApplicationContext(), dk.mitaffald.maps.MainActivity.class); 

     in.putExtra(TAG_LAT, name == null ? "Closed" : name); 
     in.putExtra(TAG_LAT, cost== null ? "Closed" : cost); 
     in.putExtra(TAG_Company, description == null ? "Closed" : description); 

     in.putExtra(TAG_MONDAY, mandag == null ? "Closed" : mandag); 
     .... 

依此類推。

name == null? 「關閉」:名稱; 簡單的問一下,如果name爲null,那麼值是關閉的,否則返回名稱。

它是一樣的:

if (name == null){ 
in.putExtra(TAG_LAT, "Closed"); 
} else { 
in.putExtra(TAG_LAT, name); 
} 

我希望這是你要找的

+0

是啊我認爲它這是我正在尋找,但我在閱讀表單XML值,因爲IAM從另一個XML頁面讀取值(textview)時有錯誤。我應該膨脹還是?導致其導致錯誤 – Tirolel 2013-02-26 12:31:18

+0

你不能從這樣的另一個活動訪問文本視圖,你需要通過意圖傳遞文本值到這個活動,膨脹該文本視圖不會引用包含你想要的文本的文本視圖 – 2013-02-26 12:35:19

+0

好吧我看到了,但我應該如何解析這另一個活動? String mandag =((TextView)findViewById(R.id.mandag))。getText()。toString(); 這裏的失敗正在logcat中出現 – Tirolel 2013-02-26 12:43:54

0
if(c.getString(TAG_MONDAY!=null && c.getString(TAG_MONDAY).length>0 && !(c.getString(TAG_MONDAY).equals(""))) 
{ 
String monday=c.getString(TAG_MONDAY); 
} 
else 
{ 
String monday="Closed"; 
}