[英]Parse Json Object in android?
我正在開發一個應用程序,因為我必須從服務器接收數據,我已經成功讀取了數據。 在這里我遇到問題,我從AsyncTask中編寫的服務器代碼接收數據,並將數據從AsyncTask發送到我的活動中,這里我僅發送三個數據中的一個,我的json對象就有3個對象。我可以在AsyncTask中獲得3個對象但沒有得到活動中
我的AsyncTask
public class ReceivingLatLongAsync extends AsyncTask<Void, Void, Void> {
private ProgressDialog pDialog;
Context mContext;
JSONArray jsonArryDetails=null;
public static final String DETAILS = "locations";
public static final String LAT = "lat";
public static final String LNG = "lng";
public static final String ADDRESS = "address";
public static final String CTIME = "ctime";
private String lat1;
private String lng1;
private String address1;
private String time1;
public ReceivingLatLongAsync(Context context){
this.mContext = context;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
pDialog = new ProgressDialog(mContext);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
ServiceHandler serviceHandler= new ServiceHandler();
String jSonString = `serviceHandler.makeServiceCall
(TrafficConstants.RECIEVE_LATLON_POL_URL, ServiceHandler.POST);`
Log.e("Response: ", "> " + jSonString);
if(jSonString != null){
try {
JSONObject jsonObject = new JSONObject(jSonString);
jsonArryDetails = jsonObject.getJSONArray(DETAILS);
for(int i = 0;i<jsonArryDetails.length();i++){
JSONObject mapDetails =
jsonArryDetails.getJSONObject(0);
lat1 = mapDetails.getString(LAT);
lng1 = mapDetails.getString(LNG);
address1 = mapDetails.getString(ADDRESS);
time1 = mapDetails.getString(CTIME);
Log.e("ADDRESS1", address1);
Log.e("TIME2",time1);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
pDialog.dismiss();
Intent intent = new Intent(mContext,GetLatLongForTPActivity.class);
intent.putExtra("LAT", lat1);
intent.putExtra("LNG", lng1);
intent.putExtra("ADDRESS", address1);
intent.putExtra("time",time1);
mContext.startActivity(intent);
}
}
我的活動
public class GetLatLongForTPActivity extends FragmentActivity
implements LocationListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_get_lat_long_for_tp);
timeEdit = (EditText)findViewById(R.id.timeId);
submitBtn = (Button)findViewById(R.id.subId);
Intent intent = getIntent();
String anotherLAT=intent.getStringExtra("LAT");
String anotherLNG=intent.getStringExtra("LNG");
Log.e(" NEW LATLONG",anotherLAT);
}
因為它是一個jsonArray,現在只發送最后一個對象,而不發送整個數組
改變這個
JSONObject mapDetails =
jsonArryDetails.getJSONObject(0);
至
JSONObject mapDetails =
jsonArryDetails.getJSONObject(i);
您必須添加類似
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
for(int i = 0;i<jsonArryDetails.length();i++){
HashMap<String, String> map = new HashMap<String, String>();
JSONObject mapDetails =
jsonArryDetails.getJSONObject(i);
lat1 = mapDetails.getString(LAT);
lng1 = mapDetails.getString(LNG);
address1 = mapDetails.getString(ADDRESS);
time1 = mapDetails.getString(CTIME);
map.put(LAT, lat1);
map.put(LNG, lg1);
map.put(ADDRESS, address1 );
map.put(CTIME, time1 );
mylist.add(map);
}
在for循環中更改索引:
for(int i = 0;i<jsonArryDetails.length();i++){
JSONObject mapDetails =jsonArryDetails.getJSONObject(i);
//etc ^ //change here
您需要創建一個類來存儲您正在使用的四個字段(緯度,經度,地址,時間),使該對象寓言化,您可以使用以下示例: http : //aryo.lecture.ub.ac.id/android在意圖內傳遞對象的數組列表/ ; 之后,您可以使用以下方法將數組附加到意圖:
intent.putParcelableArrayListExtra(String name, ArrayList<? extends Parcelable> value)
即使這比您最初希望的要復雜一些,這也是處理此問題的正確方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.