栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

日期时间不显示

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

日期时间不显示

好的,既然您上传了项目,我 我已经按照您想要的方式进行了工作。尽管如此,它仍在工作。

有几个错误-主要是逻辑错误。我尽我所能地发表评论,以便您了解我为什么/什么都做。

我没有评论的一件事是

AndroidManifest
所需的许可:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


您可以在此处下载该项目,也可以只看一下代码片段:

主要活动

我添加了一个,

ListView
以便您可以看到所有素数。还更改了我们从数据库获取数据的方式/位置以及保存到数据库的方式。

public class MainActivity extends ActionBarActivity {    private static final String TAG = MainActivity.class.getSimpleName();    private int max = 500;    private TextView primeText;    private int previousPrimeNumber;    private List<Prime> primes;    private PrimeAdapter adapter;    private MyDBHandler dbManager;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        primeText = (TextView) findViewById(R.id.primeText);        //get the object from previous session. Remember these are sorted by date        dbManager = new MyDBHandler(this);        primes = dbManager.getPrimeObjects();        //get the first prime. (AKA the last one added)        if (primes.size() != 0) { previousPrimeNumber = primes.get(0).get_primeno(); //get the first item primeText.setText(String.valueOf(previousPrimeNumber));        } else { previousPrimeNumber = 2;        }        //create list view and adapter to display the data        ListView listView = (ListView) findViewById(R.id.listView);        adapter = new PrimeAdapter(this, primes);        listView.setAdapter(adapter);        findViewById(R.id.primeButton).setonClickListener(new View.onClickListener() { @Override public void onClick(View v) {     int primeNumber = -1;     //increment previousPrimeNumber by one so we wont keep using previousPrimeNumber     for (int i = previousPrimeNumber + 1; i <= max; i++) {         if (isPrimeNumber(i)) {  primeNumber = i;  primeText.setText(String.valueOf(i));  previousPrimeNumber = i + 1;  break;         }     }     if (primeNumber != -1) {         Prime prime = new Prime(primeNumber);         dbManager.addPrime(prime);                  //The adapter is looking at the list primes. So add it to the top and notify         primes.add(0, prime);         adapter.notifyDataSetChanged();     } else {         Log.e(TAG, "Oops, there was an error. Invalid prime number");     } }        });    }    public boolean isPrimeNumber(int number) {        for (int i = 2; i <= number / 2; i++) { if (number % i == 0) {     return false; }        }        return true;    }        private class PrimeAdapter extends ArrayAdapter<Prime> {        public PrimeAdapter(Context context, List<Prime> primes) { // I am just using androids views. (android.R.id...) super(context, android.R.layout.simple_list_item_2, primes);        }        @Override        public View getView(int position, View view, ViewGroup parent) {  final Prime prime = this.getItem(position); if (view == null) {     view = LayoutInflater.from(MainActivity.this)  .inflate(android.R.layout.simple_list_item_2, null); }  // Notice I am referencing android.R.id. and not R.id. That is cause I am lazy and // didn't create my own views. TextView tv1 = (TextView) view.findViewById(android.R.id.text1); TextView tv2 = (TextView) view.findViewById(android.R.id.text2); tv1.setText(String.valueOf(prime.get_primeno())); tv2.setText(prime.getDateTimeFormatted()); //now return the view so the listView knows to show it return view;        }    }

MyDBHandler:

更改了查询并添加了两种方法,它们将分别转换

Prime
ContentValues
对象和
Cursor
质数。

public class MyDBHandler extends SQLiteOpenHelper {    private static final int DATAbase_VERSION = 1;    private static final String DATAbase_NAME = "prime.db";    public static final String TABLE_PRIME = "prime";    public static final String COLUMN_ID = "_id";    public static final String COLUMN_PRIMENO = "primeno";    public static final String COLUMN_DATETIME = "datetime";    public MyDBHandler(Context context) {        super(context, DATAbase_NAME, null, DATAbase_VERSION);    }    @Override    public void onCreate(SQLiteDatabase db) {        String query = "CREATE TABLE " + TABLE_PRIME + "(" +          COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +    // ID will be index 0     COLUMN_PRIMENO + " INTEGER, " +   // Prime will be index 1     COLUMN_DATETIME + " LONG);";      // Date will be index 2        db.execSQL(query);            }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        db.execSQL("DROP TABLE IF EXISTS " + TABLE_PRIME);        onCreate(db);    }        public void addPrime(Prime prime) {        ContentValues values = writePrime(prime);        SQLiteDatabase db = getWritableDatabase();        db.insert(TABLE_PRIME, null, values);                db.close();    }        public List<Prime> getPrimeObjects() {        final List<Prime> primes = new ArrayList<Prime>();        final SQLiteDatabase db = getWritableDatabase();                final Cursor c = db.query(TABLE_PRIME,     new String[]{COLUMN_ID, COLUMN_PRIMENO, COLUMN_DATETIME},     null, null, null, null, //much null. So wow.     COLUMN_DATETIME + " DESC"); //order in descending.                c.moveToFirst();        while (c.moveTonext()) { Prime p = buildPrime(c); //check not null if (p != null)     primes.add(p); //add to list        }                c.close();        db.close();        return primes;    }        private Prime buildPrime(Cursor cursor) {        final Prime prime = new Prime();        prime.set_id(cursor.getInt(0));  // id index as stated above        prime.set_primeno(cursor.getInt(1));        // prime index as stated above        prime.setDateTime(cursor.getLong(2));        // date index as stated above        return prime;    }        private ContentValues writePrime(Prime prime) {        ContentValues values = new ContentValues();        values.put(COLUMN_PRIMENO, prime.get_primeno());    //must insert first        values.put(COLUMN_DATETIME, prime.getDateTime());    //must insert second        return values;    }}

主要:

我只是更改了值类型。

Prime
的目的是存储一个素数整数。那么,为什么不将该字段设为整数呢?

public class Prime {    private static final String format = "yyyy-MM-dd HH:mm:ss";    private static final SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.ENGLISH);    private int _id;    private int _primeno;    private long dateTime = 0; //this is in milliseconds. Makes it easier to manage    public Prime() { }    public Prime(int primeNumber) {        //create a new prime object with a prime already known. set the date while we are at it        this._primeno = primeNumber;        this.dateTime = System.currentTimeMillis();    }    public void set_id(int _id) {        this._id = _id;    }    public void set_primeno(int _primeno) {        this._primeno = _primeno;    }    public int get_id() {        return _id;    }    public int get_primeno() {        return _primeno;    }    public long getDateTime() {        return dateTime;    }    public String getDateTimeFormatted() {        if (dateTime == 0) { dateTime = System.currentTimeMillis();        }        Date date = new Date(dateTime);        return formatter.format(date);    }    public void setDateTime(long dateTime) {        this.dateTime = dateTime;    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/414340.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号