您的位置:首页 > 运维架构

解析数据,设置图片的圆角,popwindow弹框

2017-09-20 10:58 344 查看
public class RequestBean {
//请求网络接口需要用到的参数;
public String url="";
public String value="";
public String method="GET";
//GET请求
public RequestBean(String url) {
this.url = url;
}
//post请求
public RequestBean(String url, String value, String method) {
this.url = url;
this.value = value;
this.method = method;
}
}

//封装解析类
public class HttpUtils { //在activity中调用此方法,请求数据,并获取返回的数据; public void getDataFromServer(Context context, RequestBean bean, DataCallBack callBack) { MyHandler handler = new MyHandler(context, callBack); /***** 起子线程从网络开始获取数据******/ MyTask task = new MyTask(handler, bean); //获取CPU数量 int cpunum = Runtime.getRuntime().availableProcessors(); //线程池实例化 ExecutorService service = Executors.newScheduledThreadPool(cpunum + 1); //将子线程放入线程池执行; service.execute(task); } public abstract interface DataCallBack { public abstract void prosseData(String json); } //网络请求,开启子线程 class MyTask extends Thread { private MyHandler handler; private RequestBean requestBean; public MyTask(MyHandler handler, RequestBean bean) { this.handler = handler; requestBean = bean; } @Override public void run() { super.run(); try { //网络请求,HttpURLConnection URL url = new URL(requestBean.url); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //判断是否是post请求; if (requestBean.method.equals("POST")) { //设置请求方法;默认是get请求; connection.setRequestMethod(requestBean.method); //允许写入数据; connection.setDoOutput(true); //获取输出流,写入value;添加请求接口时需要追加的参数; OutputStream os = connection.getOutputStream(); os.write(requestBean.value.getBytes()); } //根据请求结果,对请求回来的数据进行处理; StringBuilder builder = new StringBuilder(); //获取网络请求状态码; int code = connection.getResponseCode(); if (code == HttpURLConnection.HTTP_OK) {//返回成功、 //请求结果从输入流里获取; InputStream is = connection.getInputStream(); String str; BufferedReader reader = new BufferedReader(new InputStreamReader(is)); while ((str = reader.readLine()) != null) { builder.append(str); } Log.e("http-util:getdata", builder.toString()); } //使用handler发送请求回来的数据到主线程; Message msg = Message.obtain(); //请求结果放入object;如果请求成功,有数据;如果请求失败(状态码不为200,此时object为""); msg.obj = builder.toString(); //回传状态码,用于提醒用户; msg.what = code; handler.sendMessage(msg); } catch (Exception e) { e.printStackTrace(); } } } //更新UI回传数据; class MyHandler extends Handler { private Context context;//用于toast提示; private DataCallBack callBack; //如果没有toast提示,context可不传; public MyHandler(Context context, DataCallBack callBack) { this.context = context; this.callBack = callBack; } @Override public void handleMessage(Message msg) { super.handleMessage(msg); int what = msg.what;//获取网络连接状态码; if (what == 200) {//数据接口返回数据成功 String result = (String) msg.obj;//result是从服务器端获取的json字符串; callBack.prosseData(result);//调用接口内需要实现的方法,方法内的代码都在此处执行; } else { Toast.makeText(context, "请求失败!", Toast.LENGTH_SHORT).show(); } } }}

 //主页面
public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener{
//全局变量
private XListView listview;
private List<Bean.DataBean> list;
private MyAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找控件
listview = (XListView) findViewById(R.id.listview);
//监听
listview.setXListViewListener(this);
listview.setPullLoadEnable(true);
listview.setPullRefreshEnable(true);
adapter = new MyAdapter(MainActivity.this);
listview.setAdapter(adapter);
//点击条目实现跳转
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
Bean.DataBean bean = list.get(position);

intent.putExtra("url",bean.getShare_url());
startActivity(intent);
}
});
getData(true);
}
private void getData(final boolean isadd){
String path="http://ic.snssdk.com/2/article/v25/stream/?category=news_car&count=20&bd_city=北京市&bd_latitude=40.049317&bd_longitude=116.296499&bd_loc_time=1455522784&loc_mode=5&lac=4527&cid=28883&iid=3642583580&device_id=11131669133&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SCH-I919U&os_api=19&os_version=4.4.2&uuid=285592931621751&openudid=AC9E172CE2490000";
RequestBean requestBean = new RequestBean(path);
new HttpUtils().getDataFromServer(MainActivity.this, requestBean, new HttpUtils.DataCallBack() {

@Override
public void prosseData(String json) {
Gson gson=new Gson();
Bean bean = gson.fromJson(json, Bean.class);
list = bean.getData();
if (isadd){
adapter.addData(list);
}else {
adapter.updateData(list);
}
}
});
}

@Override
public void onRefresh() {
//刷新
getData(false);
listview.stopLoadMore();
listview.stopRefresh();
}

@Override
public void onLoadMore() {
//加载更多
getData(true);
listview.stopLoadMore();
listview.stopRefresh();
}
}

//创建适配器类
public class MyAdapter extends BaseAdapter {
//全局变量
private final LayoutInflater inflater;
Context context;
private List<Bean.DataBean> list=new ArrayList<>();
private final ImageLoader loader;
private ViewHolder holder;
private final DisplayImageOptions options;
private PopupWindow popupWindow;
private ImageView btn_pop_close;
//有参构造
public MyAdapter(Context context) {
this.context = context;
ImageLoaderConfiguration configuration=ImageLoaderConfiguration.createDefault(context);
loader = ImageLoader.getInstance();
loader.init(configuration);
//设置图片圆角
options = new DisplayImageOptions.Builder()
.cacheOnDisk(true)
.cacheInMemory(true)
.displayer(new RoundedBitmapDisplayer(45))
.build();
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
initPopWindow();

}

private void initPopWindow() {
View popView = inflater.inflate(R.layout.listview_pop, null);
popupWindow = new PopupWindow(popView, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
popupWindow.setBackgroundDrawable(new ColorDrawable(0));
btn_pop_close = (ImageView) popView.findViewById(R.id.btn_pop_close);
}
/**
* 显示popWindow
* */
public void showPop(View parent, int x, int y,int postion) {
//设置popwindow显示位置
popupWindow.showAtLocation(parent, 0, x, y);
//获取popwindow焦点
popupWindow.setFocusable(true);
//设置popwindow如果点击外面区域,便关闭。
popupWindow.setOutsideTouchable(true);
popupWindow.update();
if (popupWindow.isShowing()) {

}
//点击图片popupWindow消失
btn_pop_close.setOnClickListener(new View.OnClickListener() {
public void onClick(View paramView) {
popupWindow.dismiss();
}
});
}
/**
* 每个ITEM中more按钮对应的点击动作
* */
public class popAction implements View.OnClickListener {
int position;
public popAction(int position){
this.position = position;
}
@Override
public void onClick(View v) {
int[] arrayOfInt = new int[2];
//获取点击按钮的坐标
v.getLocationOnScreen(arrayOfInt);
int x = arrayOfInt[0];
int y = arrayOfInt[1];
showPop(v, x , y, position);
}
}
//添加
public void addData(List<Bean.DataBean> list){
this.list.addAll(list);
notifyDataSetChanged();
}
//更新
public void updateData(List<Bean.DataBean> list){
this.list.clear();
addData(list);
}
@Override
public int getCount() {
return list.size();
}

@Override
public Object getItem(int position) {
return list.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView==null){
convertView=View.inflate(context,R.layout.item,null);
holder = new ViewHolder();
holder.title= (TextView) convertView.findViewById(R.id.tv_title);
holder.source= (TextView) convertView.findViewById(R.id.tv_source);
holder.image= (ImageView) convertView.findViewById(R.id.iv_image);
holder.img= (ImageView) convertView.findViewById(R.id.img);
convertView.setTag(holder);
}else {
holder= (ViewHolder) convertView.getTag();
}
Bean.DataBean dataBean = list.get(position);
Bean.DataBean.MiddleImageBean middle_image = dataBean.getMiddle_image();
holder.title.setText(dataBean.getTitle());
holder.source.setText(dataBean.getSource());
loader.displayImage(middle_image.getUrl(),holder.image,options);
holder.img .setOnClickListener(new popAction(position));
return convertView;
}
class ViewHolder{
TextView title,source;
ImageView image,img;
}
}
 
//当点击条目的时候跳转到第二个页面显示webview
public class SecondActivity extends AppCompatActivity {

private WebView web;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
//找控件
web = (WebView) findViewById(R.id.web);
Intent intent = getIntent();
String url = intent.getStringExtra("url");
web.loadUrl(url);
//支持js
WebSettings settings = web.getSettings();
settings.setJavaScriptEnabled(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
//显示到Activity
web.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//返回值是true的时候是控制网页在WebView中去打开,如果为false调用系统浏览器或第三方浏览器打开
view.loadUrl(url);
return true;
}
});
}
}

//主页面的布局文件只有一个XListview
//第二个页面布局文件
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/web"></WebView>
//adapter类的布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_marginLeft="10dp"
android:layout_width="0dp"
android:layout_height="150dp"
android:layout_weight="2"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tv_title"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv_source"
/>
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:id="@+id/img"
android:src="@mipmap/ic_launcher"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"/>
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="150dp"
android:layout_weight="1"
android:layout_marginRight="10dp"
android:orientation="vertical">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/iv_image"
android:src="@mipmap/ic_launcher"/>
</LinearLayout>
</LinearLayout>

//popwindow的布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000">

<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="读文章"
android:layout_marginLeft="5dp"
android:textColor="#fff"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="收藏"
android:layout_marginLeft="5dp"
android:textColor="#fff"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="不敢兴趣"
android:layout_marginLeft="5dp"
android:textColor="#fff"/>
<ImageView
android:id="@+id/btn_pop_close"
android:layout_width="0dp"
android:layout_height="20dp"
android:layout_weight="1"
android:src="@mipmap/ic_launcher"
android:layout_marginRight="10dp"/>
</LinearLayout>

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐