Android基础的sharedPreferences存储,ListView,以及httpclient,和asynchttp框架请求的使用

一,sharedpreferences怎么获取,存取
        它是直接在new出来的吗?(通过上下文获取)getSharedPreferences("config", Context.MODE_PRIVATE);
    1,存数据的时候
            //首先获取到一个编辑器,然后将数据put进去
            Editor editor = sp.edit();  
            editor.putString("qq", qq);
            editor.putString("pwd", pwd);
            //保存数据完,一定要记得调用commit毕方法
            editor.commit();
    2,取数据的时候还需要先拿到编辑器吗?
            sp.getString("qq", ""); //代表着取一个string类型的数据,key是qq,第二个参数是当key对应的引用不存在时,或者值不存在的时候,返回
            的一个默认值!


练习常用的api ,它们的存储位置在哪里
    context.getFileDir()   /data/data/xxxxx(包名)/files
    context.getCacheDir()  /data/data/xxxxx(包名)/cache 相对来说不重要,保存一些临时的数据,可以随时删掉不影响程序的逻辑
    openFileOutput(name,mode) /data/data/xxxxx(包名)/files 理解第二个参数的含义(设置访问的权限),第二个参数从哪里获取
    (Context.MODE_PRIVATE (文件私有,其他程序不可读写), Context.MODE_WORLD_READABLE(全局可写,其他程序可读,但不可写), Context.MODE_WORLD_WRITEABLE全局可写,其他程序可写,但不可读)
    如果想要可写可读,需要使用Context.MODE_WORLD_READABLE+Context.MODE_WRITEABLE
    
    
SD卡的相关操作(存储公用的文件)

    检查权限(4.0之后系统加了一个sd卡读的权限,不过为了向老版本兼容,默认情况下是关闭的,)
        不过要向sd卡写数据,是要写入权限的
        android.permission.WRITE_EXTERNAL_STORAGE 写权限
        android.permission.READ_EXTERNAL_STORAGE  读权限
    
    //判断SD卡是否被挂载了
    Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
    
    剩余空间  
    long size = Environment.getExternalStorageDirectory().getFreeSpace();
    
    //可以在这里判断一下可用空间是否够用
    
    //将size转为string格式的数据,这样可以给textview使用
    String info = Formatter.formatFileSize(this, size);
二,ListView
是系统给我们提供的一个可以显示很多个item的控件.
使用步骤

1. 在布局xml文件声明listview控件
2. 在java代码找到listview控件,设置数据适配器,可以写一个内部类,继承BaseAdapter  (内部类也可以,)
3. getCount()确定listview里面有多少个条目
4. getView(int position) 返回某个位置要显示的view对象
5. View.inflate() 打气筒 可以把xml文件转成view显示到界面
listview的优化原理(自己脑海里背一遍)
    当我们滑动listview的时候,每当一个item看不见的时候,那么那个item就可以被复用起来了,也就是成为了convertView,那个时候convertView就不为null了
    所谓的复用,其实本质是就是item的view对象没有真正的被垃圾回收器回收掉,而是重新将身上的数据
    给换掉了,看起来好像是出现了一个新的item而已
    
三、使用httpclient的方式去请求服务器
    思路:1,拿到浏览器HttpClient 2,输入一个地址(同时也是一种请求方式,有两种HttpGet,HttpPost) 3,敲回车只执行(httpClient.execute)
                //1.拿到浏览器HttpClient
                HttpClient client = new DefaultHttpClient();
                //2.输入地址或者数据
                HttpPost httpPost = new HttpPost(path);
                //3.敲回车只执行
                HttpResponse response = client.execute(httpPost);
        获取状态码和httpUrlConnection有什么区别?
                //httpClient的这种方式更加面向对象,代码更好理解
                int code = conn.getResponseCode();
                int code = response.getStatusLine().getStatusCode();
                
        POST提交数据怎么设置提交的参数?        
            List<NameValuePair> parameters = new ArrayList<NameValuePair>();
            parameters.add(new BasicNameValuePair("qq", qq));//map
            parameters.add(new BasicNameValuePair("pwd", pwd));
            httpPost.setEntity(new UrlEncodedFormEntity(parameters, "utf-8"));
        
        用这种方式要需要设置两个头信息吗?
            不许要,应为HttpClient把这些细节都给封装起来了,不用需关心其中的细节
    
    
四,使用 asynchttpAndroid框架下的get和post请求(asyn:/a·sync/)
GET请求:(直接client.get)
    其实本质是把httpclient,进行了下包装
    直接拷贝模板代码进行即可
    AsyncHttpClient client = new AsyncHttpClient();
                            //http相应的一个处理器
        client.get(path, new AsyncHttpResponseHandler() {
            @Override    
                //成功调用的方法
            public void onSuccess(int statusCode, Header[] headers,
                    //服务器返回的数据所对应的二进制的数组
                    byte[] responseBody) {
                    //成功显示服务器返回的数组
                tv_status.setText(new String(responseBody));
            }
            @Override
            public void onFailure(int statusCode, Header[] headers,
                    byte[] responseBody, Throwable error) {
                tv_status.setText("http请求失败"+new String(responseBody));
            }
         });
    
POST请求:(client.post(url,params,responseHander))
    url参数是地址
    params参数:请求参数实例代码可以拷贝
    responseHander直接new出来重写它的两个方法(模板代码直接拷贝)
    
AsyncHttpClient client = new AsyncHttpClient();
        RequestParams params = new RequestParams();
        params.put("qq", qq);
        params.put("pwd", pwd);
        client.post(path, params, new AsyncHttpResponseHandler(){
            @Override
            public void onSuccess(int statusCode, Header[] headers,
                    byte[] responseBody) {
                tv_status.setText("登陆结果:"+new String(responseBody));
            }
            @Override
            public void onFailure(int statusCode, Header[] headers,
                    byte[] responseBody, Throwable error) {
                tv_status.setText("请求失败请检查网络");
            }
        });

你可能感兴趣的:(Android基础的sharedPreferences存储,ListView,以及httpclient,和asynchttp框架请求的使用)