我有一个数据库,我想添加一个列,我更改了静态数据库版本,但是当我在我的设备上运行程序时,新列仍然没有,所以我猜我onUpdate没有被调用,我不知道为什么.
这就是我创建数据库的方式
     private static class DatabaseHelper extends SQLiteOpenHelper 
    {
        DatabaseHelper(Context context) 
        {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
        @Override
        public void onCreate(SQLiteDatabase db) 
        {
            createTables(db);
        }
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, 
                              int newVersion) 
        {
            Log.w("CalendarDB", "Upgrading database from version " + oldVersion 
                  + " to "
                  + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS Events_Table");
            onCreate(db);
        }
        private void createTables(SQLiteDatabase db){
            db.execSQL("CREATE TABLE " + EVENTS_TABLE + "(" + ID + …Run Code Online (Sandbox Code Playgroud) 我有一个AlertDialog,当我点击时停止播放声音,但在某些设备上看起来调用onStop()抛出了IllegalStateException,但为什么?
如果对话框已启动,则表示声音正在播放,因此应该是音频未播放的情况.
我暂时把它包围起来,但这会导致什么呢?
alert.setPositiveButton("YES", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                try{
                mp.stop(); //error
                mp.reset();
                mp.release();
                }catch(Exception e){
                    Log.d("Nitif Activity", e.toString());
                }
                v.cancel();
                popupMessage();                 
                finish();
            }
        });
Run Code Online (Sandbox Code Playgroud) 我IntentSerivce有时在后台运行,在某些情况下它可能是一个很长的运行过程.我为用户提供了一个退出应用程序的选项,该应用程序基本上只停止并轮询并忽略任何GCM推送通知.但是如果推送通知进入并且IntentService需要一段时间才能完成它所拥有的功能(从服务器获取信息并在需要时向用户发送通知,如新消息到达或其他内容).
这是问题,如果用户在intentservice仍在运行时选择"退出"应用程序,他们仍然会收到我不想要的通知.我知道有stopSelf()服务的方法,但是当我知道用户通过菜单按钮"退出"应用程序时,我需要在活动中停止它.发送另一个intent服务不起作用,因为意图排队并且context.stopService(intent);我的活动中的调用也不起作用,所以我怎么能阻止它?
我试图显示一个带有listview的对话框,其中包含我的数据库中的名称,但我一直在使用StaleDataException.我知道这通常意味着我试图使用来自闭合光标的数据,但光标不会关闭,直到我得到所有数据所以我不明白为什么我得到这个
d = new Dialog(this);
d.setContentView(R.layout.dialog_layout);
d.setTitle("Select Bowler");
ListView lv = (ListView)d.findViewById(R.id.dialog_list);
Cursor c = getContentResolver().query(
    BowlersDB.CONTENT_URI,
    new String[] {
        BowlersDB.ID, BowlersDB.FIRST_NAME, BowlersDB.LAST_NAME
    },
    null,
    null,
    BowlersDB.LAST_NAME + " COLLATE LOCALIZED ASC"
);
if (c.moveToFirst() && c != null) {
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(
        this,
        R.layout.names_listview,
        c,
        new String[] {
            BowlersDB.FIRST_NAME, BowlersDB.LAST_NAME
        },
        new int[] {
            R.id.bListTextView, R.id.bListTextView2
        },
        0
    );
    lv.setAdapter(adapter);
    lv.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> arg0, View v, int position, long id) { …Run Code Online (Sandbox Code Playgroud) 我有一个MapFragment显示地图
如果用户随地图离开活动(或设备进入睡眠状态)然后返回onResume被调用,我将地图移回标记.
但是当我移动相机时,我得到一个例外
07-23 16:28:42.725: E/AndroidRuntime(19095): java.lang.RuntimeException: Unable to resume activity {ecm2.android/ecm2.android.EMGNoteMapActivity}: java.lang.IllegalStateException: Map size should not be 0. Most likely, layout has not yet occured for the map view.
07-23 16:28:42.725: E/AndroidRuntime(19095):    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2742)
 07-23 16:28:42.725: E/AndroidRuntime(19095):   at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2771)
07-23 16:28:42.725: E/AndroidRuntime(19095):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2235)
07-23 16:28:42.725: E/AndroidRuntime(19095):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
07-23 16:28:42.725: E/AndroidRuntime(19095):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
07-23 16:28:42.725: E/AndroidRuntime(19095):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-23 16:28:42.725: E/AndroidRuntime(19095):    at android.os.Looper.loop(Looper.java:137)
07-23 16:28:42.725: E/AndroidRuntime(19095):    at android.app.ActivityThread.main(ActivityThread.java:5041)
07-23 16:28:42.725: E/AndroidRuntime(19095):    at java.lang.reflect.Method.invokeNative(Native Method) …Run Code Online (Sandbox Code Playgroud) 我正在启动文件选择器,用户可以在其中选择要使用的pdf文件并将其上传到服务器。
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
startActivityForResult(intent,1);
Run Code Online (Sandbox Code Playgroud)
当他们选择文件时,它会返回到onActivityResult我查看Uri文件的位置,以查看文件是否包含.pdf
if(requestCode == 1 && resultCode == RESULT_OK){
    Uri filePath = data.getData();
    File file = new File(filePath.getPath());
    if(filePath.toString().contains(".pdf")){
        if(file.length() <= 1048576){
            de.setPDFUri(filePath.toString());
        }else{
            Toast.makeText(this,"PDF cannot be more than 1 MB, please select another", Toast.LENGTH_SHORT).show();
        }
    }else{
        Toast.makeText(this,"Can only upload PDF files", Toast.LENGTH_SHORT).show();
    }
}
Run Code Online (Sandbox Code Playgroud)
但是,这仅适用于某些文件管理器应用程序(Astro,Explorer),大多数时候我会得到这样的回报
file:///storage/sdcard0/Download/20131231103232738561744.pdf
Run Code Online (Sandbox Code Playgroud)
在其他程序上(到目前为止,我仅见过制造商内置的应用程序),我得到了这样的回报
content://media/external/file/109
Run Code Online (Sandbox Code Playgroud)
这显然不会告诉我有关文件及其类型的任何信息,并且不会返回该ContentProvider文件的信息。
有没有一种方法可以让用户仅.pdf通过发送意图来选择文件,或者有一种方法可以检查uri并确保它是.pdf文件?
无论何时更新GridView/ListView,都要调用notifyDatasetChanged适配器,该适配器使用新数据重新填充列表,删除当前列表中的所有内容.
现在以设计指南中的这个小视频为例L Preview
是否有可能实现同样的效果,你看到的唯一变化是当适配器重新加载时没有任何"闪烁"的新项目,或者这是现在只能在L中完成的事情?
Google Keep添加新笔记时,也可以在应用程序中找到此效果
当我在数据库中搜索某些内容时,我正在使游标索引超出范围"索引0请求:大小为0"错误.我在我的数据库中搜索的项目目前不存在,我知道这一点,但我如何处理项目不存在的查询.
我发了一个电话号码
public String searchNumber(Context context,String number){
    ContactDB db = new ContactDB(context);
    db.open();
    Cursor curs = db.getIdFromPhone(number);
    String test = curs.getString(curs.getColumnIndex(db.PHONE_NUMBER)); //fails here
    curs.close();
    db.close();
    return test;
}
Run Code Online (Sandbox Code Playgroud)
询问
public Cursor getIdFromPhone(String where){
    Cursor cur = db.query(DATABASE_TABLE, new String [] {ID,PHONE_NUMBER}
    , PHONE_NUMBER + "='" + where + "'",null,null,null,null);
    if(cur != null)
        cur.moveToFirst();
    return cur;
}
Run Code Online (Sandbox Code Playgroud)
测试搜索
from = messages.getDisplayOriginatingAddress();
String dbNumber = searchNumber(arg0,from);
            if(dbNumber.equals(from)){
      //do stuff
}else{
   //do other stuff
}
Run Code Online (Sandbox Code Playgroud)
如果找不到数字,它应该执行else语句,但它没有那么远
这是我第一次使用内容提供商,但我遵循了开发人员文档,但是当我运行该程序时,它告诉我failed to find provider info
这是我的清单
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tyczj.bowling"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="11" />
<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity android:name="Tabs">
        <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
    </activity>
    <activity android:name="BowlersList"></activity>
</application>
<provider android:name="com.tyczj.bowling.BowlersDB"
    android:authorities="com.tyczj.bowling.bowlersdb">
</provider>
</manifest>
Run Code Online (Sandbox Code Playgroud)
和我的内容提供商
public class BowlersDB extends ContentProvider {
private static final String DATABASE_NAME = "Bowlers";
private static final String BOWLERS_TABLE = "bowlers_table";
private static final int DATABASE_VERSION = 1;
public static final Uri CONTENT_URI = Uri.parse("content://com.tyczj.bowling.bowlersdb");
private static final UriMatcher …Run Code Online (Sandbox Code Playgroud) 是否可以在不onItemSelected调用方法的情况下将选定的微调器位置更改为某些位置?
基本上我要做的是回到微调器中之前选择的项目,因为其中一个项目在选中时会显示一个对话框.当用户点击后退按钮时,微调器仍然显示它们在被解除时显示对话框的位置.
那么有没有办法让它在恢复使用时不被调用,spinner.setSelection(position)或者是否有办法保持显示对话框的位置不被选中?
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
    switch(arg2){
    case 0:
        previousSelection = 1;
        mNavButtonClick.onNavButtonClick(1);
        break;
    case 1:
        previousSelection = 2;
        mNavButtonClick.onNavButtonClick(2);
        break;
    case 2:
        previousSelection = 3;
        mNavButtonClick.onNavButtonClick(3);
        break;
    case 3:
        previousSelection = 4;
        mNavButtonClick.onNavButtonClick(4);
        break;
    case 4:
        previousSelection = 5;
        mNavButtonClick.onNavButtonClick(5);
        break;
    case 5:
                    //this case shows the dialog
        mNavButtonClick.onNavButtonClick(6);
        break;
    default:
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)
显示对话框,用户单击后退按钮关闭对话框并在onDismissI调用中
spinner.setSelection(previousSelection);
Run Code Online (Sandbox Code Playgroud)
回到之前的选择,但这又重新创建了我不想要的视图,因为我已经在视图中我只想表明我在旋转器中的视图