gpt4 book ai didi

android - 将基本适配器与异步任务一起使用以显示 ListView

转载 作者:太空狗 更新时间:2023-10-29 15:13:38 24 4
gpt4 key购买 nike

我正在从 soap 服务中读取数据并希望将它们显示在列表中。为此,我创建了一个基本适配器。并尝试在异步任务中使用它。但这给出了一些我没有解决方案的错误。根据错误,我认为异步任务中的 postExecute 存在一些问题,但不知道如何解决。一些帮助会非常好。

这里是一些代码。

public class PatientBasicInfo {
private String FirstName;
private String LastName;
private String Id;
private String Gender;
private String DateOfBirth;

public PatientBasicInfo(String firstname,String lastname,String id){
this.FirstName=firstname;
this.LastName=lastname;
this.Id=id;
}

public String getFirstName(){
return this.FirstName;
}
public void setFirstName(String firstname){
this.FirstName=firstname;
}

public String getLastName(){
return this.LastName;
}
public void setLastName(String lastname){
this.LastName=lastname;
}
public String getPatientId(){
return this.Id;
}
public void setPatientId(String Id){
this.Id=Id;
}
public String getGender(){
return this.Gender;
}
public void setGender(String gender){
this.Gender=gender;
}
public String getDateOfBirth(){
return this.DateOfBirth;
}
public void setDateOfBirth(String dob){
this.DateOfBirth=dob;
}

@Override
public String toString(){
return FirstName+" "+LastName;
}

}

基础适配器

public class PatientListBaseAdapter extends BaseAdapter{

private static ArrayList<PatientBasicInfo> patientArrayList;

private LayoutInflater mInflater;
private Context context;

public PatientListBaseAdapter(Context ctx,ArrayList<PatientBasicInfo> result) {
// TODO Auto-generated constructor stub
patientArrayList=result;
mInflater = LayoutInflater.from(context);
this.context=ctx;
}

public int getCount() {
// TODO Auto-generated method stub
return patientArrayList.size();
}

public Object getItem(int position) {
// TODO Auto-generated method stub
return patientArrayList.get(position);
}

public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
final String patientId=patientArrayList.get(position).getPatientId();
final String patientFirstName=patientArrayList.get(position).getFirstName();
final String patientLastName=patientArrayList.get(position).getLastName();
mInflater = (LayoutInflater)
context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.custom_rowview, null);
holder = new ViewHolder();
holder.txtFirstName = (TextView) convertView.findViewById(R.id.patientfirstname);
holder.txtLastName = (TextView) convertView.findViewById(R.id.patientlastname);
holder.txtID=(TextView)convertView.findViewById(R.id.patientid);

convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

holder.txtFirstName.setText(patientFirstName);
holder.txtLastName.setText(patientLastName);

holder.txtID.setText(patientId);
return convertView;
}
private class ViewHolder {
TextView txtFirstName;
TextView txtID;
TextView txtLastName;

}}

Activity

public class PatientListActivity extends Activity{

private static final String SOAP_ACTION = "";
private static final String NAMESPACE = "";
private static final String METHOD_NAME = "getPatientList";
private static final String URL = "";


TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.custom_listview);
Intent intent = getIntent();

String nurseId = intent.getStringExtra("nurseid");

new CallgetPatientList().execute(nurseId);
}

class CallgetPatientList extends AsyncTask<String,Void,ArrayList<PatientBasicInfo>>{

@Override
protected ArrayList<PatientBasicInfo> doInBackground(String... params) {
// TODO Auto-generated method stub
Log.d("param", params[0].toString());
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

Credetials cred=new Credetials("username","password");
PropertyInfo credPropertyinfo=new PropertyInfo();
credPropertyinfo.setName("credetials");
credPropertyinfo.setValue(cred);
credPropertyinfo.setType(cred.getClass());

request.addProperty(credPropertyinfo);
request.addProperty("nurseId", params[0].toString());

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

try{

androidHttpTransport.call(SOAP_ACTION, envelope);


SoapObject response = (SoapObject) envelope.bodyIn;

ArrayList<PatientBasicInfo> patientList=new ArrayList<PatientBasicInfo>();

for(int i= 0; i< response.getPropertyCount(); i++){
SoapObject object = (SoapObject)response.getProperty(i);
String firstname=object.getProperty("firstName").toString();
String lastname=object.getProperty("lastName").toString();

String id=object.getProperty("id").toString();

PatientBasicInfo aa=new PatientBasicInfo(firstname,lastname,id);
patientList.add(aa);
}

Log.d("patientCount", Integer.toString(patientList.size()));
return patientList;


}catch(Exception e){
//return e.getMessage();
return null;
}

}
@Override
protected void onPostExecute(ArrayList<PatientBasicInfo> result){
//super.onPostExecute(result);
Log.d("resultcount", Integer.toString(result.size()));
final ListView lv = (ListView) findViewById(R.id.ListView01);
PatientListBaseAdapter adapter=new PatientListBaseAdapter(getApplicationContext(),result);
lv.setAdapter(adapter);
}

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_patient_list, menu);
//return true;


return true;

}
}

错误

enter image description here

最佳答案

目前您正在将 NULL 上下文传递给 LayoutInflater.from,因此使用更改 PatientListBaseAdapter 构造函数代码作为:

public PatientListBaseAdapter(Context ctx,ArrayList<PatientBasicInfo> result) {
// TODO Auto-generated constructor stub
patientArrayList=result;
this.context=ctx;
mInflater = LayoutInflater.from(this.context);

}

关于android - 将基本适配器与异步任务一起使用以显示 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14581103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com