我正在使用导航抽屉开发应用程序。这个应用程序调用一些Web服务,并在列表中获取数据和显示。在我的应用程序中,当某个项目点击导航抽屉时,它会显示一些带有文本视图,列表视图和图像按钮的布局。这些布局显示使用片段。[片段类]。在这个类中我想调用一个Web服务来获取一些数据根据特定日期[日期是使用日期选择器设置]并在列表视图中显示该数据。
我已经实现了一种根据提供的日期获取数据的方法。但我的问题是,当我提出一个断点来检查我的代码时,应用程序消失了,也无法调试。[不会破坏点] ..我不能在碎片类中进行这些Web服务调用吗?如果是的话,我该怎么做?请指导我......
这是我的片段类
public class FindPeopleFragment extends Fragment {
TextView curentDate;
public FindPeopleFragment(TextView date){
curentDate = date;
}
public FindPeopleFragment(){
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.schedule, container, false);
ImageButton date = (ImageButton) rootView.findViewById(R.id.btnDate);
curentDate = (TextView) rootView.findViewById(R.id.txtCurrentDate);
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
curentDate.setText(new StringBuilder()
// Month is 0 based, just add 1
.append(year)
.append("-")
.append(month + 1)
.append("-").append(day));
// call to the method which is get the data according to the date
ArrayList<HashMap<String, String>> requests= loadSortedRequests((String) curentDate.getText());
if(requests!=null){
ListView listview =(ListView) rootView.findViewById(R.id.sortedList);
String[] items = new String[] {"No Requests for the selected Date"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, items);
listview.setAdapter(adapter);
}
else{
}
date.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showDatePicker();
//loadSortedRequests((String) curentDate.getText());
}
});
return rootView;
}
private void showDatePicker() {
DatePickerFragment date = new DatePickerFragment();
/**
* Set Up Current Date Into dialog
*/
Calendar calender = Calendar.getInstance();
Bundle args = new Bundle();
args.putInt("year", calender.get(Calendar.YEAR));
args.putInt("month", calender.get(Calendar.MONTH));
args.putInt("day", calender.get(Calendar.DAY_OF_MONTH));
date.setArguments(args);
/**
* Set Call back to capture selected date
*/
date.setCallBack(ondate);
date.show(getFragmentManager(), "Date Picker");
}
OnDateSetListener ondate = new OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
curentDate.setText(String.valueOf(dayOfMonth) + "/" + String.valueOf(monthOfYear+1)
+ "/" + String.valueOf(year));
//call a method to get requests acording to the current date
}
};
// the methode which is retrive the data
public ArrayList<HashMap<String, String>> loadSortedRequests(String date){
ArrayList<HashMap<String, String>> sortedRequestsList = new ArrayList<HashMap<String, String>>();
String caregiverID = MainActivity.confirm;
String User = null;
String ActualImage=null;
JsonParser jParser = new JsonParser();
JSONObject parameter = new JSONObject();
JSONObject requestsObject = new JSONObject();
try {
parameter.put("caregiverPersonId", caregiverID);
requestsObject = jParser.getJSONFromUrl(parameter, MainActivity.url);
JSONArray resultSet = requestsObject.getJSONArray("d");
/* if(resultSet.length()>0)
{
JSONObject c1 = resultSet.getJSONObject(0);
JSONObject apoinmentObj1 = c1.getJSONObject("Appointment");
User = apoinmentObj1.getString("UserId");
}*/
for(int i=0;i<resultSet.length();i++){
JSONObject record = resultSet.getJSONObject(i);
JSONObject appoinment = record.getJSONObject("Appointment").getJSONObject("DayTimeSlot");
String startTime = appoinment.getString("StartTime");
String endTime = appoinment.getString("EndTime");
JSONObject pationProfobj = record.getJSONObject("PatientProfile");
String firstName = pationProfobj.getString("FirstName");
String lastName = pationProfobj.getString("LastName");
String Imageurl = pationProfobj.getString("ImageURL");
if(!Imageurl.equalsIgnoreCase("null")){
if(!Imageurl.equalsIgnoreCase("") ) {
String newUrl = Imageurl.substring(3);
// ActualImage = "http://vardle.para.com"+newUrl;
ActualImage = "http://vardle.com/"+newUrl;
}
else{
ActualImage = null;
}
}
else{
ActualImage = null;
}
String jsonDate = record.getString("Date");
String formatingDate = jsonDate.replace("/Date(", "").replace(")/", "");
Long Ldat = Long.valueOf(formatingDate);
Date theDate = new Date(Ldat);
String dateOfAppoinmnt = (String) DateFormat.format("MM/dd/yy", theDate);
if(dateOfAppoinmnt.equalsIgnoreCase(date)){
HashMap< String, String> sort = new HashMap<String, String>();
sort.put("StartTime", startTime);
sort.put("EndTime", endTime);
sort.put("FirstName", firstName);
sort.put("LastName", lastName);
sort.put("ImageURL", Imageurl);
sort.put("Date", dateOfAppoinmnt);
sortedRequestsList.add(sort);
}
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sortedRequestsList;
} }
当我尝试调试时,我得到了这个
01-22 17:03:45.817: E/dalvikvm(22453): VM aborting
01-22 17:03:45.817: A/libc(22453): Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1), thread 22453 (onlist.jsonlist)
修改
public class FindPeopleFragment extends Fragment {
TextView curentDate;
ListView listview;
public FindPeopleFragment(TextView date){
curentDate = date;
}
public FindPeopleFragment(){
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.schedule, container, false);
ImageButton date = (ImageButton) rootView.findViewById(R.id.btnDate);
curentDate = (TextView) rootView.findViewById(R.id.txtCurrentDate);
listview =(ListView) rootView.findViewById(R.id.sortedList);
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
curentDate.setText(new StringBuilder()
// Month is 0 based, just add 1
.append(year)
.append("-")
.append(month + 1)
.append("-").append(day));
// call to the method which is get the data according to the date
date.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showDatePicker();
//loadSortedRequests((String) curentDate.getText());
}
});
return rootView;
}
private void showDatePicker() {
DatePickerFragment date = new DatePickerFragment();
/**
* Set Up Current Date Into dialog
*/
Calendar calender = Calendar.getInstance();
Bundle args = new Bundle();
args.putInt("year", calender.get(Calendar.YEAR));
args.putInt("month", calender.get(Calendar.MONTH));
args.putInt("day", calender.get(Calendar.DAY_OF_MONTH));
date.setArguments(args);
/**
* Set Call back to capture selected date
*/
date.setCallBack(ondate);
date.show(getFragmentManager(), "Date Picker");
}
OnDateSetListener ondate = new OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
curentDate.setText(String.valueOf(dayOfMonth) + "/" + String.valueOf(monthOfYear+1)
+ "/" + String.valueOf(year));
//call a method to get requests acording to the current date
new callService().execute(curentDate.getText().toString());
}
};
// the methode which is retrive the data
public ArrayList<HashMap<String, String>> loadSortedRequests(String date){
ArrayList<HashMap<String, String>> sortedRequestsList = new ArrayList<HashMap<String, String>>();
String caregiverID = MainActivity.confirm;
String User = null;
String ActualImage=null;
JsonParser jParser = new JsonParser();
JSONObject parameter = new JSONObject();
JSONObject requestsObject = new JSONObject();
try {
parameter.put("caregiverPersonId", caregiverID);
requestsObject = jParser.getJSONFromUrl(parameter, MainActivity.url);
JSONArray resultSet = requestsObject.getJSONArray("d");
/* if(resultSet.length()>0)
{
JSONObject c1 = resultSet.getJSONObject(0);
JSONObject apoinmentObj1 = c1.getJSONObject("Appointment");
User = apoinmentObj1.getString("UserId");
}*/
for(int i=0;i<resultSet.length();i++){
JSONObject record = resultSet.getJSONObject(i);
JSONObject appoinment = record.getJSONObject("Appointment").getJSONObject("DayTimeSlot");
String startTime = appoinment.getString("StartTime");
String endTime = appoinment.getString("EndTime");
JSONObject pationProfobj = record.getJSONObject("PatientProfile");
String firstName = pationProfobj.getString("FirstName");
String lastName = pationProfobj.getString("LastName");
String Imageurl = pationProfobj.getString("ImageURL");
if(!Imageurl.equalsIgnoreCase("null")){
if(!Imageurl.equalsIgnoreCase("") ) {
String newUrl = Imageurl.substring(3);
// ActualImage = "http://vardle.parag.com"+newUrl;
ActualImage = "http://vardle.com/"+newUrl;
}
else{
ActualImage = null;
}
}
else{
ActualImage = null;
}
String jsonDate = record.getString("Date");
String formatingDate = jsonDate.replace("/Date(", "").replace(")/", "");
Long Ldat = Long.valueOf(formatingDate);
Date theDate = new Date(Ldat);
String dateOfAppoinmnt = (String) DateFormat.format("MM/dd/yy", theDate);
if(dateOfAppoinmnt.equalsIgnoreCase(date)){
HashMap< String, String> sort = new HashMap<String, String>();
sort.put("StartTime", startTime);
sort.put("EndTime", endTime);
sort.put("FirstName", firstName);
sort.put("LastName", lastName);
sort.put("ImageURL", Imageurl);
sort.put("Date", dateOfAppoinmnt);
sortedRequestsList.add(sort);
}
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sortedRequestsList;
}
public class callService extends AsyncTask<String, Void, ArrayList<HashMap<String, String>>>{
private ProgressDialog pDialog;
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
/*pDialog = new ProgressDialog(activity);
pDialog.setMessage("Getting Data ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
*/
pDialog = ProgressDialog.show(getActivity(), "Read Data", "Please Wait..", true, false);
}
@Override
protected ArrayList<HashMap<String, String>> doInBackground(String... arg0) {
// TODO Auto-generated method stub
ArrayList<HashMap<String, String>> requests= loadSortedRequests(arg0[0]);
return requests;
// return x;
}
@Override
protected void onPostExecute(ArrayList<HashMap<String, String>> res) {
// TODO Auto-generated method stub
pDialog.dismiss();
// String hidenAppid = res;
if(res!=null){
String[] items = new String[] {"No Requests for the selected Date"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, items);
listview.setAdapter(adapter);
}
else{
Toast.makeText(getActivity(), "bla bl;a bnla", Toast.LENGTH_LONG).show();
}
}
}
}