第十一天 内容提供者以及少量广播

启动界面java代码

package com.example.ep2;

import android.Manifest;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private Uri uri;
    private ContentResolver cr;
    private List<MyCLass> list;
    private ListView lv;
    private MyAdapter aaa;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        uri=Uri.parse("content://com.shi.1234567");
        cr=getContentResolver();
        lv=findViewById(R.id.ep2_listView);
        getData();
//        requestPermissions(new String[]{Manifest.permission.READ_CONTACTS,Manifest.permission.INTERNET},102);
    }

    private void getData() {
        String[] stars = {"PicId", "name","address"};
        Cursor query = cr.query(uri, stars, null, null, null);
        Toast.makeText(this, ""+query, Toast.LENGTH_SHORT).show();
        list=new ArrayList<>();
        if( query!=null) {
            while (query.moveToNext()) {
                String picId = query.getString(query.getColumnIndex("PicId"));
                String name = query.getString(query.getColumnIndex("name"));
                String address = query.getString(query.getColumnIndex("address"));
                MyCLass myCLass = new MyCLass();
                myCLass.setName(name);
                myCLass.setPicId(picId);
                myCLass.setAddress(address);
                Log.i("123321", "getData: mc.toString" + myCLass.toString());
                list.add(myCLass);
            }
            aaa = new MyAdapter(list, MainActivity.this);
            lv.setAdapter(aaa);
        }else{
            Toast.makeText(this, "数据为空。", Toast.LENGTH_SHORT).show();
        }
        lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setIcon(R.mipmap.ic_launcher_round);
                builder.setMessage("是否删除?").setTitle("提示").setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        list.remove(position);
                        aaa.notifyDataSetChanged();
                        int delete = cr.delete(uri, "PicId=?", new String[]{list.get(position).getPicId()});
                        Toast.makeText(MainActivity.this, "delete:"+delete, Toast.LENGTH_SHORT).show();
                        dialog.dismiss();
                    }
                }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
                builder.create();
                builder.show();
                return false;
            }
        });
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(requestCode==102&&grantResults[0]== PackageManager.PERMISSION_GRANTED){
            getData();
        }
    }
}

对应的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/ep2_listView"
        >

    </ListView>

</LinearLayout>

自定义适配器类

package com.example.ep2;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;

import java.util.List;

public class MyAdapter extends BaseAdapter {
    private List<MyCLass> list;
    private Context con;

    public MyAdapter(List<MyCLass> list, Context con) {
        this.list = list;
        this.con = con;
    }

    @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;
    }
    private MyId mi;
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if( convertView==null){
            convertView= LayoutInflater.from(con).inflate(R.layout.mylayout,null);
            mi=new MyId();
            mi.id=convertView.findViewById(R.id.ep2_text_id);
            mi.name=convertView.findViewById(R.id.ep2_text_name);
            mi.iv=convertView.findViewById(R.id.ep2_image);
            convertView.setTag(mi);
        }else{
            mi= (MyId) convertView.getTag();
        }
        mi.name.setText(list.get(position).getName());
        mi.id.setText(list.get(position).getPicId());
        Glide.with(con).load(list.get(position).getAddress()).into(mi.iv);
        return convertView;
    }

    class MyId{
        private TextView id;
        private TextView name;
        private ImageView iv;
    }
}
自定义类
package com.example.ep2;

public class MyCLass {
    private String PicId;
    private String name;
    private String address;

    public String getPicId() {
        return PicId;
    }

    public void setPicId(String picId) {
        PicId = picId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "MyCLass{" +
                "PicId='" + PicId + '\'' +
                ", name='" + name + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

清单列表

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.ep2">
    <uses-permission android:name="com.ep1.read"/>
    <uses-permission android:name="com.ep1.write"/>
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
自定义布局的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/ep2_text_id"
        android:textSize="20sp"
        android:textColor="#673AB7"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#CDDC39"
        android:id="@+id/ep2_text_name"
        />
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/ep2_image"
        />
</LinearLayout>

内容提供者

package com.example.ep1;

import android.content.ContentProvider;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.AsyncTask;
import android.util.Log;

import com.google.gson.Gson;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;

//uri  1234567
//内容提供者方
public class MyContentProvider extends ContentProvider {
    private Context con;
    private Uri uri;
    private SQLiteDatabase db;
    public MyContentProvider() {
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        // Implement this to handle requests to delete one or more rows.
        return db.delete("ep",selection,selectionArgs);
    }

    @Override
    public String getType(Uri uri) {
        // TODO: Implement this to handle requests for the MIME type of the data
        // at the given URI.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        // TODO: Implement this to handle requests to insert a new row.
        db.insert("ep", null, values);
        return uri;
    }

    @Override
    public boolean onCreate() {
        // TODO: Implement this to initialize your content provider on startup.
        MyHelper mh = new MyHelper(getContext(), "evening.db", null, 1);
        db=mh.getReadableDatabase();
        new MyAsyncTask().execute("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1");
//        if( db==null) {
//            return false;
//        }
        return true;
    }

    class MyAsyncTask extends AsyncTask<String, Void, List<MyBean.DataBean>> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected void onPostExecute(List<MyBean.DataBean> list) {
            super.onPostExecute(list);
            Uri uri=Uri.parse("com.shi.1234567");
            for (int i = 0; i < list.size(); i++) {
                ContentValues cv = new ContentValues();
                cv.put("PicId",list.get(i).getId());
                cv.put("name",list.get(i).getTitle());
                cv.put("address",list.get(i).getPic());
                insert(uri,cv);
            }
            Log.i("123321", "onPostExecute: 插入完毕。");

        }

        @Override
        protected List<MyBean.DataBean> doInBackground(String... strings) {
            try {
                URL url=new URL( strings[0]);
                HttpURLConnection uc = (HttpURLConnection) url.openConnection();
                uc.connect();
                if( uc.getResponseCode()==200){
                    InputStream is = uc.getInputStream();
                    BufferedReader br = new BufferedReader(new InputStreamReader(is));
                    StringBuilder sb = new StringBuilder();
                    String str=null;
                    while( (str=br.readLine())!=null){
                        sb.append(str);
                    }
                    Log.i("123321", "doInBackground: sb.toString"+sb.toString());
                    Gson gson = new Gson();
                    MyBean myBean = gson.fromJson(sb.toString(), MyBean.class);
                    List<MyBean.DataBean> data = myBean.getData();
                    return data;
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
                        String[] selectionArgs, String sortOrder) {
        // TODO: Implement this to handle query requests from clients.
        return db.query("ep", projection, selection, selectionArgs, null,null, sortOrder);
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection,
                      String[] selectionArgs) {
        // TODO: Implement this to handle requests to update one or more rows.
        return db.update("db",values,selection,selectionArgs);
    }
}

自定义Helper类

package com.example.ep1;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class MyHelper extends SQLiteOpenHelper {
    public MyHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table ep(PicId integer,name varchar(20),address varchar(100))");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值