0

JSON配列に問題があります。助けてくれる人がいることを本当に願っています。

JSON データを含むクラスがあり、別のアクティビティに「intent putextra」を送信しているとしましょう。

別のアクティビティに送信する前に null の値を変更するにはどうすればよいですか? ヌル値を発見するためにいくつかの印刷を行いましたが、それらは異なります。例:

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

 **and so on.**

問題は、->すべてのjsonデータがあり、それらをオブジェクトに解析していますが、「intent.putextra」の前にそれらを別のアクティビティに送信して、nullを見つけて「Closed」に置き換えたいということです

だからそれは次のようになります

 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);

        }
    });
}

}

4

4 に答える 4

1

私も過去にこの問題に苦しんでいますが、これが良い解決策かどうかはわかりませんが、私にとってはうまくいきます。あなたにも役立つことを願っています。

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";
            }
于 2013-02-26T12:04:28.750 に答える
0

nullJSON ファイル/オブジェクトを解析する前に、JSON 内のすべての文字列を文字列として置き換えてみませんか?

考えられる他の解決策は、すべてのオブジェクトをループして、それらがnullかどうかを確認することです。それをClosed

null編集: JSON オブジェクトを文字列としてロードし、すべてを次Closedのように置き換えます。

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
于 2013-02-26T12:06:27.927 に答える
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);
        ....

等々。

名前 == null ? 「クローズ」: 名前; name が null であるかどうかを尋ねる単純な質問の場合、値は閉じられ、そうでない場合は name が返されます。

と同じです:

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

それがあなたが探しているものであることを願っています

于 2013-02-26T12:15:32.347 に答える
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";
}
于 2013-02-26T12:56:04.180 に答える