Android 从web服务调用更新ListView 2 ListView,而不转到新活动

Android 从web服务调用更新ListView 2 ListView,而不转到新活动,android,listview,Android,Listview,我有一个包含2个列表视图和2个适配器的布局。我想显示的第一个列表是web服务调用的第一个人。第二个列表视图,我想显示我在他们向那个人报告时在他们之后得到的列表。当用户单击第二个列表时,我想使用他们的参数进行web调用 如何更新第二个listview以使用param进行另一次调用,以获取新列表并刷新该listview,而不转到其他活动?我可以正确地创建web服务,但我要进行一项新的活动。我只想让listview更新第二个listview的新数据以及用户单击以在顶部listview上显示的人 pub

我有一个包含2个列表视图和2个适配器的布局。我想显示的第一个列表是web服务调用的第一个人。第二个列表视图,我想显示我在他们向那个人报告时在他们之后得到的列表。当用户单击第二个列表时,我想使用他们的参数进行web调用

如何更新第二个listview以使用param进行另一次调用,以获取新列表并刷新该listview,而不转到其他活动?我可以正确地创建web服务,但我要进行一项新的活动。我只想让listview更新第二个listview的新数据以及用户单击以在顶部listview上显示的人

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