Android 从web服务调用更新ListView 2 ListView,而不转到新活动
我有一个包含2个列表视图和2个适配器的布局。我想显示的第一个列表是web服务调用的第一个人。第二个列表视图,我想显示我在他们向那个人报告时在他们之后得到的列表。当用户单击第二个列表时,我想使用他们的参数进行web调用 如何更新第二个listview以使用param进行另一次调用,以获取新列表并刷新该listview,而不转到其他活动?我可以正确地创建web服务,但我要进行一项新的活动。我只想让listview更新第二个listview的新数据以及用户单击以在顶部listview上显示的人Android 从web服务调用更新ListView 2 ListView,而不转到新活动,android,listview,Android,Listview,我有一个包含2个列表视图和2个适配器的布局。我想显示的第一个列表是web服务调用的第一个人。第二个列表视图,我想显示我在他们向那个人报告时在他们之后得到的列表。当用户单击第二个列表时,我想使用他们的参数进行web调用 如何更新第二个listview以使用param进行另一次调用,以获取新列表并刷新该listview,而不转到其他活动?我可以正确地创建web服务,但我要进行一项新的活动。我只想让listview更新第二个listview的新数据以及用户单击以在顶部listview上显示的人 pub
public class MainActivity extends AppCompatActivity {
ListView mMangerList, directReportListView;
ProgressBar mProgressBar;
ArrayList<PeepWithPic> mPeepWithPics = new ArrayList<>();
TopListViewAdapter mTopListViewAdapter;
BottomListViewAdapter mBottomListViewAdapter;
DatabaseHandler databaseHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/* if toolbar is wanted by user uncomment
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);*/
mMangerList = (ListView) findViewById(R.id.mManagerList);
directReportListView = (ListView) findViewById(R.id.mDirectReportList);
mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
mProgressBar.setVisibility(View.VISIBLE);
mTopListViewAdapter = new TopListViewAdapter(this, mPeepWithPics);
mBottomListViewAdapter = new BottomListViewAdapter(this, mPeepWithPics);
mMangerList.setAdapter(mTopListViewAdapter);
directReportListView.setAdapter(mBottomListViewAdapter);
getXMLData();
/*databaseHandler = new DatabaseHandler(getApplicationContext());
List<PeepWithPic> peepPic = databaseHandler.getAllContacts();
for (PeepWithPic pwc : peepPic) {
String log = "ID: " +pwc.getEmployee_number()+" ,First Name: " + pwc.getFirst_name() +
" ,Last Name: " + pwc.getLast_name() + " ,Title: " + pwc.getPayroll_title();
Log.d("PEEP ", log);
}*/
}
//Uncomment to add OptionsMenu(three dots on app bar) if needed
/*@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}*/
private static OkHttpClient getUnsafeOkHttpClient() {
try {
// Create a trust manager that does not validate certificate chains
final TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new java.security.cert.X509Certificate[]{};
}
}
};
// Install the all-trusting trust manager
final SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
// Create an ssl socket factory with our all-trusting manager
final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(5, TimeUnit.MINUTES)
.writeTimeout(5, TimeUnit.MINUTES)
.readTimeout(5, TimeUnit.MINUTES);
builder.sslSocketFactory(sslSocketFactory);
builder.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
return builder.build();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void getXMLData() {
OkHttpClient client = getUnsafeOkHttpClient();
Request request = new Request.Builder()
.url(getString(R.string.API_FULL_URL))
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
final String responseData = response.body().string();
final InputStream stream = new ByteArrayInputStream(responseData.getBytes());
XMLPullParserHandler parserHandler = new XMLPullParserHandler();
final ArrayList<PeepWithPic> peepWithPics = (ArrayList<PeepWithPic>) parserHandler.parse(stream);
mPeepWithPics.clear();
mPeepWithPics.addAll(peepWithPics);
ContentValues contentValues = new ContentValues();
//tell adapter on the UI thread its data changed
runOnUiThread(new Runnable() {
@Override
public void run() {
mTopListViewAdapter.notifyDataSetChanged();
mBottomListViewAdapter.notifyDataSetChanged();
mMangerList.setVisibility(View.VISIBLE);
directReportListView.setVisibility(View.VISIBLE);
mProgressBar.setVisibility(View.GONE);
}
});
}
});
}
}
public class TopListViewAdapter extends ArrayAdapter<PeepWithPic> {
public TopListViewAdapter(Context context, ArrayList<PeepWithPic> peepWithPic) {
super(context, 0, peepWithPic);
}
@NonNull
@Override
public View getView(final int position, View convertView, @NonNull final ViewGroup parent) {
final PeepWithPic peepWithPic = getItem(position);
final AppViewHolder holder;
convertView = LayoutInflater.from(getContext()).inflate(R.layout.contact_cardview_layout, parent, false);
holder = new AppViewHolder();
holder.tvFirstName = (TextView) convertView.findViewById(R.id.personFirstName);
holder.tvLastName = (TextView) convertView.findViewById(R.id.personLastName);
holder.tvTitle = (TextView) convertView.findViewById(R.id.personTitle);
holder.mPeepPic = (ImageView) convertView.findViewById(R.id.person_photo);
holder.mDetailsButton = (ImageButton) convertView.findViewById(R.id.fullDetailButton);
holder.mCardView = (CardView) convertView.findViewById(R.id.home_screen_cardView);
if (peepWithPic != null) {
holder.tvFirstName.setText(peepWithPic.getFirst_name());
holder.tvLastName.setText(peepWithPic.getLast_name());
holder.tvTitle.setText(peepWithPic.getPayroll_title());
if (peepWithPic.getThumbnailData() != null) {
String peepPicData = peepWithPic.getThumbnailData();
byte[] imageAsBytes = Base64.decode(peepPicData.getBytes(), Base64.DEFAULT);
Bitmap parsedImage = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length);
holder.mPeepPic.setImageBitmap(parsedImage);
}
holder.mDetailsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getContext(),"This is working as expect for now", Toast.LENGTH_LONG).show();
}
});
holder.mCardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String peepWithPic1 = peepWithPic.getEmployee_number();
Intent mIntent = new Intent(view.getContext(), MainActivity.class);
mIntent.putExtra("Employee_number", peepWithPic1);
mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
view.getContext().startActivity(mIntent);
}
});
convertView.setTag(holder);
}
return convertView;
}
public class AppViewHolder {
private TextView tvFirstName;
private TextView tvLastName;
private TextView tvTitle;
private ImageView mPeepPic;
private ImageButton mDetailsButton;
private CardView mCardView;
}
public类MainActivity扩展了AppCompatActivity{
ListView mMangerList、directReportListView;
ProgressBar-mProgressBar;
ArrayList mPeepWithPics=新的ArrayList();
TopListViewAdapter mTopListViewAdapter;
BottomListViewAdapter mBottomListViewAdapter;
DatabaseHandler DatabaseHandler;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*如果用户需要工具栏,请取消注释
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏)*/
mMangerList=(ListView)findViewById(R.id.mManagerList);
directReportListView=(ListView)findViewById(R.id.mDirectReportList);
mProgressBar=(ProgressBar)findViewById(R.id.ProgressBar);
mProgressBar.setVisibility(View.VISIBLE);
mTopListViewAdapter=新的TopListViewAdapter(此,mPeepWithPics);
mBottomListViewAdapter=新的BottomListViewAdapter(此,mPeepWithPics);
mMangerList.setAdapter(mTopListViewAdapter);
setAdapter(mBottomListViewAdapter);
getXMLData();
/*databaseHandler=新的databaseHandler(getApplicationContext());
List peepPic=databaseHandler.getAllContacts();
用于(PeepWithPic pwc:peepPic){
String log=“ID:”+pwc.getEmployee_number()+”,名字:“+pwc.getFirst_Name()+
,姓氏:“+pwc.getLast_Name()+”,标题:“+pwc.getPayroll_Title()”;
Log.d(“PEEP”,Log);
}*/
}
//如果需要,取消添加选项菜单(应用程序栏上的三个点)的注释
/*@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(右菜单菜单菜单主菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
//noinspection SimplifiableIf语句
if(id==R.id.action\u设置){
返回true;
}
返回super.onOptionsItemSelected(项目);
}*/
私有静态OkHttpClient getUnsafeOkHttpClient(){
试一试{
//创建不验证证书链的信任管理器
最终TrustManager[]trustAllCerts=新TrustManager[]{
新X509TrustManager(){
@凌驾
public void checkClientTrusted(java.security.cert.X509Certificate[]链,字符串authType)引发CertificateException{
}
@凌驾
public void checkServerTrusted(java.security.cert.X509Certificate[]链,字符串authType)抛出CertificateException{
}
@凌驾
public java.security.cert.X509Certificate[]getAcceptedIssuers(){
返回新的java.security.cert.X509Certificate[]{};
}
}
};
//安装所有信任管理器
最终SSLContext SSLContext=SSLContext.getInstance(“SSL”);
init(null,trustAllCerts,new java.security.SecureRandom());
//使用我们的全信任管理器创建ssl套接字工厂
最终SSLSocketFactory SSLSocketFactory=sslContext.getSocketFactory();
OkHttpClient.Builder=新的OkHttpClient.Builder();
builder.connectTimeout(5,时间单位:分钟)
.writeTimeout(5,时间单位:分钟)
.读取超时(5,时间单位为分钟);
建造商:sslSocketFactory(sslSocketFactory);
builder.hostnameVerifier(新的hostnameVerifier(){
@凌驾
公共布尔验证(字符串主机名、SSLSession会话){
返回true;
}
});
返回builder.build();
}捕获(例外e){
抛出新的运行时异常(e);
}
}
public void getXMLData(){
OkHttpClient=getUnsafeOkHttpClient();
Request Request=newrequest.Builder()
.url(getString(R.string.API\u FULL\u url))
.build();
client.newCall(request).enqueue(new Callback()){
@凌驾
公共void onFailure(调用调用,IOE异常){
e、 printStackTrace();
}
@凌驾
public void onResponse(调用、最终响应)引发IOException{
final String responseData=response.body().String();
final InputStream stream=新的ByteArrayInputStream(responseData.getBytes());
XMLPullParserHandler parserHandler=新的XMLPullParserHandler();
最终ArrayList peepWithPics=(ArrayList)parserHandler.parse(stream);