对mysql数据库表优化,优化代码提升性能 (简易新闻 七)
第一步创建索引
为那些经常要查询的字段设置索引如:
category,其中设置一个复合索引(title,category)为后面实现精确查询埋下伏笔
关于索引,复合索引,全文检索等可以去看 mysql数据库进阶学习 一
使用的数据库为mysql
输入如下sql语句(单索引category):
alter table news_info add index in_c(category);
输入如下sql语句(复合索引):
alter table news_info add index (title,category);
效果如下:
其中第一个为单索引,第二个箭头为复合索引,第三个箭头为全文检索(这里暂时不需要),看到这里(如果你细心看的话不难发现,没有title的单索引)
这里又和复合索引有很大关系,我们新建的复合索引title(title,category)使用功能包括实现单索引(title),复合(title,category)查询。
优化查询语句
优化子查询(使用JOIN连接查询)
修改UserFavoriteActivity.java
package com.example.frametest.UserMode;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import com.example.frametest.R;
import com.example.frametest.WebActivity;
import com.example.frametest.json.NewsBean;
import com.example.frametest.tools.DBOpenHelper;
import com.example.frametest.tools.MyApplication;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class UserFavoriteActivity extends AppCompatActivity {
private ListView listView;
private List<NewsBean.ResultBean.DataBean> newList = new ArrayList<>();
NewsBean.ResultBean.DataBean dataBean;
String phone_userfavorite;
private static final int NewsFav_List = 6;
private TextView textView;
@SuppressLint("HandlerLeak")
private Handler newsFavHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case NewsFav_List:
NewsInfoAdapter adapter = new NewsInfoAdapter(UserFavoriteActivity.this,R.layout.item_layout_news,newList);
Log.d("传入数据后", String.valueOf(newList.size()));
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_favorite);
initNews();
listView = (ListView) findViewById(R.id.list_news);
phone_userfavorite = MyApplication.getMoublefhoneUser();
System.out.println("收藏页面是否传值"+phone_userfavorite);
Toolbar toolbar = (Toolbar) findViewById(R.id.userFavorite_toolbar);
toolbar.setTitle("我的收藏");
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null){
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.ic_chevron_left);
}
}
private void initNews() {
new Thread(new Runnable() {
@Override
public void run() {
Connection conn = null;
conn = (Connection) DBOpenHelper.getConn();
//这里优化子查询
String sql = "select title,url from news_info LEFT JOIN user_collect on news_info.uniquekey=user_collect.news_id where user_collect.user_phone= ?";
PreparedStatement pstmt;
try {
String num = phone_userfavorite;
pstmt = (PreparedStatement) conn.prepareStatement(sql);
pstmt.setString(1,num);
ResultSet rs = pstmt.executeQuery();
while (rs.next()){
rs.getString(1);
NewsBean.ResultBean.DataBean dataBean = new NewsBean.ResultBean.DataBean();
dataBean.setTitle(rs.getString(1));
dataBean.setUrl(rs.getString(2));
newList.add(dataBean);
}
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
//此处优化
//
Message msg = newsFavHandler.obtainMessage();
msg.what=NewsFav_List;
newsFavHandler.sendMessage(msg);
}
}).start();
}
@SuppressLint("MissingSuperCall")
@Override
protected void onStart() {
super.onStart();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
NewsBean.ResultBean.DataBean dataBean = newList.get(position);
String url = dataBean.getUrl();
Intent intent = new Intent(UserFavoriteActivity.this,WebActivity.class);
intent.putExtra("url",url);
startActivity(intent);
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case android.R.id.home:
UserFavoriteActivity.this.finish();
break;
}
return true;
}
}
判断条件中的user_phone=13115231059改为。。。=‘1311’
优化代码
优化方法:修改Handler通信。
即把原来的
Message msg =new Message();
替换为
Message msg = handler..obtainMessage(); //方法
修改MainActivity.java
package com.example.frametest;
import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.NavigationView;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.GravityCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.example.frametest.UserMode.LoginActivity;
import com.example.frametest.UserMode.User;
import com.example.frametest.UserMode.UserFavoriteActivity;
import com.example.frametest.UserMode.User_DataActivity;
import com.example.frametest.tools.DBOpenHelper;
import com.example.frametest.tools.MyApplication;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import de.hdodenhof.circleimageview.CircleImageView;
public class MainActivity extends AppCompatActivity {
private android.support.v7.widget.Toolbar toolbar;
private DrawerLayout mDrawerLayout;
private NavigationView navigationView;
private TabLayout tabLayout;
private ViewPager viewPager;
private List<String> list;
private TextView tvhuoqu,tvName;
String phonenumber,userName;
private static final int USER_LOOK_NAME = 0;
@SuppressLint("HandlerLeak")
private Handler userFeedHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
String admin_title,admin_url,user_name;
switch (msg.what){
case USER_LOOK_NAME:
User user = (User) msg.obj;
user_name =user.getUser_name();
tvName = (TextView) findViewById(R.id.text_username);
tvName.setText(user_name);
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = findViewById(R.id.toolbar);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); //获取抽屉布局
navigationView = (NavigationView) findViewById(R.id.nav_design);//获取菜单控件实例
View v = navigationView.getHeaderView(0);
CircleImageView circleImageView =(CircleImageView) v.findViewById(R.id.icon_image);
tabLayout = (TabLayout) findViewById(R.id.tabLayout);
viewPager = (ViewPager) findViewById(R.id.viewPager);
list = new ArrayList<>();
tvhuoqu = (TextView) findViewById(R.id.text_huoqu);
}
@Override
protected void onStart() {
super.onStart();
/* toolbar.setLogo(R.drawable.icon);//设置图片logo,你可以添加自己的图片*/
toolbar.setTitle("简易新闻");
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
if (actionBar !=null){
//通过HomeAsUp来让导航按钮显示出来
actionBar.setDisplayHomeAsUpEnabled(true);
//设置Indicator来添加一个点击图标
actionBar.setHomeAsUpIndicator(R.drawable.ic_menu_24dp);
}
navigationView.setCheckedItem(R.id.nav_call);//设置第一个默认选中
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
//设置菜单项的监听事件
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
mDrawerLayout.closeDrawers();
switch (menuItem.getItemId()) {
case R.id.nav_call:
phonenumber = MyApplication.getMoublefhoneUser();
//通过判断手机号是否存在,来决定是进入编辑资料页面还是进入登陆页面
if (phonenumber != null){
Intent unIntent = new Intent(MainActivity.this,User_DataActivity.class);
startActivity(unIntent);
} else {
Intent exitIntent = new Intent(MainActivity.this,LoginActivity.class);
startActivity(exitIntent);
}
break;
case R.id.nav_friends:
//
break;
case R.id.nav_location:
Toast.makeText(MainActivity.this, "你点击了发布新闻,下步实现", Toast.LENGTH_SHORT).show();
break;
case R.id.nav_favorite:
phonenumber = MyApplication.getMoublefhoneUser();
if (phonenumber != null){
Intent userFavIntent = new Intent(MainActivity.this,UserFavoriteActivity.class);
startActivity(userFavIntent);
} else {
Intent exitIntent = new Intent(MainActivity.this,LoginActivity.class);
startActivity(exitIntent);
}
break;
case R.id.nav_settings:
Toast.makeText(MainActivity.this,"需要做出登出功能,可扩展夜间模式,离线模式等,检查更新",Toast.LENGTH_LONG).show();
break;
case R.id.nav_exit:
Intent intent = new Intent(MainActivity.this,LoginActivity.class);
startActivity(intent);
break;
default:
}
return true;
}
});
list.add("头条");
list.add("社会");
list.add("国内");
list.add("国际");
list.add("娱乐");
list.add("体育");
list.add("军事");
list.add("科技");
list.add("财经");
/* viewPager.setOffscreenPageLimit(1);*/
viewPager.setAdapter(new FragmentStatePagerAdapter(getSupportFragmentManager()) {
//得到当前页的标题,也就是设置当前页面显示的标题是tabLayout对应标题
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return list.get(position);
}
@Override
public Fragment getItem(int position) {
NewsFragment newsFragment = new NewsFragment();
//判断所选的标题,进行传值显示
Bundle bundle = new Bundle();
if (list.get(position).equals("头条")){
bundle.putString("name","top");
}else if (list.get(position).equals("社会")){
bundle.putString("name","shehui");
}else if (list.get(position).equals("国内")){
bundle.putString("name","guonei");
}else if (list.get(position).equals("国际")){
bundle.putString("name","guoji");
}else if (list.get(position).equals("娱乐")){
bundle.putString("name","yule");
}else if (list.get(position).equals("体育")){
bundle.putString("name","tiyu");
}else if (list.get(position).equals("军事")){
bundle.putString("name","junshi");
}else if (list.get(position).equals("科技")){
bundle.putString("name","keji");
}else if (list.get(position).equals("财经")){
bundle.putString("name","caijing");
}else if (list.get(position).equals("时尚")){
bundle.putString("name","shishang");
}
newsFragment.setArguments(bundle);
return newsFragment;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
NewsFragment newsFragment = (NewsFragment) super.instantiateItem(container, position);
return newsFragment;
}
@Override
public int getItemPosition(@NonNull Object object) {
return FragmentStatePagerAdapter.POSITION_NONE;
}
@Override
public int getCount() {
return list.size();
}
});
//TabLayout要与ViewPAger关联显示
tabLayout.setupWithViewPager(viewPager);
String inputText = load();
if (!TextUtils.isEmpty(inputText)){
System.out.println("________)))))))");
System.out.println("________)))))))");
System.out.println(phonenumber);
phonenumber =inputText;
MyApplication.setMoublefhoneUser(phonenumber);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//获取toolbar菜单项
getMenuInflater().inflate(R.menu.toolbar,menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
//R.id.home修改导航按钮的点击事件为打开侧滑栏
case android.R.id.home:
if (MyApplication.getInstance().getMoublefhoneUser() != null){
phonenumber = MyApplication.getInstance().getMoublefhoneUser();
}
mDrawerLayout.openDrawer(GravityCompat.START); //打开侧滑栏
tvhuoqu = (TextView) findViewById(R.id.text_huoqu);
tvhuoqu.setText(phonenumber);
//用户开启侧滑栏时,查询数据库对应手机号的用户名,并显示在侧滑栏头部
new Thread(new Runnable() {
@Override
public void run() {
Connection conn = null;
conn = (Connection) DBOpenHelper.getConn();
String sql = "select user_name from user_info where user_phone ='"+phonenumber+"'";
Statement pstmt;
try {
pstmt = (Statement) conn.createStatement();
ResultSet rs = pstmt.executeQuery(sql);
while (rs.next()){
User user = new User();
user.setUser_name(rs.getString(1));
//此处优化方法,去掉以前的new Message()这样会不断地新增一个Handle增加内存空间响应时间
//
Message msg = userFeedHandler.obtainMessage();
msg.what=USER_LOOK_NAME;
msg.obj = user;
userFeedHandler.sendMessage(msg);
}
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}).start();
break;
case R.id.userFeedback:
final EditText ed =new EditText(MainActivity.this);
AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("用户反馈");
dialog.setView(ed);
dialog.setCancelable(false);
dialog.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//添加点击事件
}
});
dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
dialog.show();
break;
case R.id.userExit:
Toast.makeText(this,"ni click 退出",Toast.LENGTH_SHORT).show();
break;
default:
}
return true;
}
public String load() {
FileInputStream in = null;
BufferedReader reader = null;
StringBuilder content = new StringBuilder();
try {
in = openFileInput("data");
System.out.println("是否读到文件内容"+in);
reader = new BufferedReader(new InputStreamReader(in));
String line = "";
while ((line = reader.readLine()) != null){
content.append(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (reader != null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return content.toString();
}
}
修改UserFavoriteActivity.java
package com.example.frametest.UserMode;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import com.example.frametest.R;
import com.example.frametest.WebActivity;
import com.example.frametest.json.NewsBean;
import com.example.frametest.tools.DBOpenHelper;
import com.example.frametest.tools.MyApplication;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class UserFavoriteActivity extends AppCompatActivity {
private ListView listView;
private List<NewsBean.ResultBean.DataBean> newList = new ArrayList<>();
NewsBean.ResultBean.DataBean dataBean;
String phone_userfavorite;
private static final int NewsFav_List = 6;
private TextView textView;
@SuppressLint("HandlerLeak")
private Handler newsFavHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case NewsFav_List:
NewsInfoAdapter adapter = new NewsInfoAdapter(UserFavoriteActivity.this,R.layout.item_layout_news,newList);
Log.d("传入数据后", String.valueOf(newList.size()));
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_favorite);
initNews();
listView = (ListView) findViewById(R.id.list_news);
phone_userfavorite = MyApplication.getMoublefhoneUser();
System.out.println("收藏页面是否传值"+phone_userfavorite);
Toolbar toolbar = (Toolbar) findViewById(R.id.userFavorite_toolbar);
toolbar.setTitle("我的收藏");
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null){
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.ic_chevron_left);
}
}
private void initNews() {
new Thread(new Runnable() {
@Override
public void run() {
Connection conn = null;
conn = (Connection) DBOpenHelper.getConn();
String sql = "select title,url from news_info where uniquekey in( select news_id from user_collect where user_phone = ?)";
PreparedStatement pstmt;
try {
String num = phone_userfavorite;
System.out.println("^^^^^^^^^");
System.out.println("^^^^^^^^^");
System.out.println("huoqu手机号内容是"+num);
pstmt = (PreparedStatement) conn.prepareStatement(sql);
pstmt.setString(1,num);
ResultSet rs = pstmt.executeQuery();
while (rs.next()){
rs.getString(1);
NewsBean.ResultBean.DataBean dataBean = new NewsBean.ResultBean.DataBean();
dataBean.setTitle(rs.getString(1));
dataBean.setUrl(rs.getString(2));
newList.add(dataBean);
}
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
//此处优化
//
Message msg = newsFavHandler.obtainMessage();
msg.what=NewsFav_List;
newsFavHandler.sendMessage(msg);
}
}).start();
}
@SuppressLint("MissingSuperCall")
@Override
protected void onStart() {
super.onStart();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
NewsBean.ResultBean.DataBean dataBean = newList.get(position);
String url = dataBean.getUrl();
Intent intent = new Intent(UserFavoriteActivity.this,WebActivity.class);
intent.putExtra("url",url);
startActivity(intent);
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case android.R.id.home:
UserFavoriteActivity.this.finish();
break;
}
return true;
}
}
修改User_DataActivity.java
package com.example.frametest.UserMode;
import android.Manifest;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.ContentUris;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Build;
import android.os.Handler;
import android.os.Message;
import android.provider.DocumentsContract;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.frametest.R;
import com.example.frametest.tools.DBOpenHelper;
import com.example.frametest.tools.MyApplication;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class User_DataActivity extends AppCompatActivity {
private ImageView imageView_user;
public static final int CHOOSE_USER_TOUX =11;
public static final int USER_SETTINGS_NAME =12;
public static final int USER_UPDATE_NAME =13;
private TextView tv_user_photo,tv_nc,tv_nc_fb;
String user_setting_phone;
String input_userName;
@SuppressLint("HandlerLeak")
private Handler userSettingsHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
String admin_title,admin_url;
switch (msg.what){
case USER_SETTINGS_NAME:
Toast.makeText(User_DataActivity.this,"用户名为空或不存在!",Toast.LENGTH_SHORT).show();
break;
case USER_UPDATE_NAME:
tv_nc_fb.setText(input_userName);
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user__data);
user_setting_phone = MyApplication.getMoublefhoneUser();
Toolbar uToolbar = (Toolbar) findViewById(R.id.userData_toolbar);
tv_user_photo = (TextView)findViewById(R.id.tv_user_photo);
imageView_user = (ImageView)findViewById(R.id.imageView_user);
tv_nc = (TextView)findViewById(R.id.tv_nc);
tv_nc_fb = (TextView) findViewById(R.id.tv_nc_fb);
uToolbar.setTitle("个人信息");
setSupportActionBar(uToolbar);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null){
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.ic_chevron_left);
}
}
@Override
protected void onStart() {
super.onStart();
tv_user_photo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ContextCompat.checkSelfPermission(User_DataActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE) !=PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(User_DataActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}else {
openAlbum();
}
}
});
tv_nc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final EditText editText =new EditText(User_DataActivity.this);
AlertDialog.Builder alog = new AlertDialog.Builder(User_DataActivity.this);
alog.setTitle("输入用户名");
alog.setView(editText);
alog.setCancelable(false);
alog.setPositiveButton("提交", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
new Thread(new Runnable() {
@Override
public void run() {
input_userName = editText.getText().toString();
if ("".equals(input_userName) || input_userName == null) {
//此处优化
//
Message msg = userSettingsHandler.obtainMessage();
msg.what =USER_SETTINGS_NAME;
userSettingsHandler.sendMessage(msg);
} else {
Connection conn = null;
conn = (Connection) DBOpenHelper.getConn();
String sql = "update user_info set user_name='"+input_userName+"' where user_phone='"+user_setting_phone+"'";
int i = 0;
PreparedStatement pstmt;
try {
pstmt = (PreparedStatement) conn.prepareStatement(sql);
i = pstmt.executeUpdate();
pstmt.close();
conn.close();
//此处优化
//
Message msg = userSettingsHandler.obtainMessage();
msg.what = USER_UPDATE_NAME;
userSettingsHandler.sendMessage(msg);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}).start();
}
});
alog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
alog.show();
}
});
}
private void openAlbum() {
Intent mIntent = new Intent("android.intent.action.GET_CONTENT");
mIntent.setType("image/*");
startActivityForResult(mIntent,CHOOSE_USER_TOUX);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case 1:
if (grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
openAlbum();
}else {
Toast.makeText(this,"you denied the permission",Toast.LENGTH_SHORT).show();
}
break;
default:
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
switch (requestCode){
case CHOOSE_USER_TOUX:
if (resultCode == RESULT_OK) {
if (Build.VERSION.SDK_INT >= 19){
handleImageOnKiKat(data);
}else {
handleImageBeforeKiKat(data);
}
}
break;
}
}
@TargetApi(Build.VERSION_CODES.KITKAT)
private void handleImageOnKiKat(Intent data) {
String imagePath = null;
Uri uri = data.getData();
if (DocumentsContract.isDocumentUri(this,uri)){
String docId = DocumentsContract.getDocumentId(uri);
if ("com.android.providers.media.documents".equals(uri.getAuthority())){
String id = docId.split(":")[1];
String selection = MediaStore.Images.Media._ID + "=" + id;
imagePath = getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,selection);
}else if ("com.android.providers.downloads.documents".equals(uri.getAuthority())){
Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"),Long.valueOf(docId));
imagePath = getImagePath(contentUri,null);
}
} else if ("content".equalsIgnoreCase(uri.getScheme())){
//如或是content类型的URI就使用普通方法处理
imagePath = getImagePath(uri,null);
} else if ("file".equalsIgnoreCase(uri.getScheme())){
//如果是file类型的直接获取图片路径就行
imagePath = uri.getPath();
}
diplayImage(imagePath); //根据路径显示图片
}
private void handleImageBeforeKiKat(Intent data) {
Uri uri = data.getData();
String imagePath = getImagePath(uri,null);
diplayImage(imagePath);
}
private String getImagePath(Uri uri, String selection) {
String path = null;
//通过Uri和selection来获取真实的图片路径
Cursor cursor = getContentResolver().query(uri,null,selection,null,null);
if (cursor != null){
if (cursor.moveToFirst()){
path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
}
cursor.close();
}
return path;
}
private void diplayImage(String imagePath) {
if (imagePath != null){
Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
imageView_user.setImageBitmap(bitmap);
int a =10;
} else {
Toast.makeText(this,"failed to get image",Toast.LENGTH_SHORT).show();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case android.R.id.home:
User_DataActivity.this.finish();
break;
}
return true;
}
@Override
protected void onDestroy() {
super.onDestroy();
Intent intent = new Intent();
finish();
}
}
今天就讲到这里了,欢迎批评与指正!,后面如果可以进一步对数据库或者代码优化的,可能会另起一篇。关于整个app的制作可以看 android新闻app 。
下一篇将会对活动栈优化。