2010-10-25 27 views
0

嘿,我尝试了一些在android中的东西,必须获取以短信形式发送的文字并在模拟器屏幕上打印。但该应用程序没有及时更新。如何在执行时间更新Android应用程序

我发送消息。好。但是,当我打开应用程序它不打印我发送的单词。所以我必须关闭模拟器然后再打开它,然后运行该应用程序,并且该单词在那里。

像这样的Id当我发送消息,然后我访问应用程序,单词打印没有我必须关闭模拟器。

我该怎么做?

所以这里是我的代码。请记住,我想发送一条新短信,当我再次访问我的应用程序时(不关闭并打开模拟器),它会更新屏幕中的文字,新的文字将显示在屏幕上。谢谢。

我有这个类SMS.java,这是我的活动,和其他类,也就是在这之下的位置,称为DataHelper.java,其操纵我的数据库,并具有插入,查询方法,更新等:

SMS.java

package com.sys; 

import java.util.List; 
import java.util.StringTokenizer; 

import com.sys.DataHelper; 

import android.app.Activity; 
import android.content.ContentValues; 
import android.content.Intent; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.BaseColumns; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 
import com.sys.ratedSmsContacts; 
public class SMS extends Activity { 

private DataHelper dh; 
private static TextView txtView;     
private static Button btnChkCntts; 
private static Button btnChkTag; 

final Uri CONTENT_URI = Uri.parse("content://sms/sent"); 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    this.dh = new DataHelper(this); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final Button button = (Button) findViewById(R.id.btnChkCntts); 
    button.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     Intent myIntent = new Intent(v.getContext(), ratedSmsContacts.class); 
     startActivityForResult(myIntent, 0); 
    } 
    }); 

    txtView = (TextView)findViewById(R.id.txtView);  
     Cursor cursor = getContentResolver().query(CONTENT_URI, null, null, null, null);          
     String body; 
     String atual; 
     if(cursor.moveToFirst()){ 
      body = cursor.getString(cursor.getColumnIndexOrThrow("body")).toString(); 
      if(body == " "){ 
       Toast.makeText(getBaseContext(), "There is no words to save!", Toast.LENGTH_LONG).show(); 
      } 
       else{        
        StringTokenizer st = new StringTokenizer(body);     
        while(st.hasMoreTokens()){ 
         atual = st.nextToken(); 
          while(this.dh.select(atual) == true){ 
           this.dh.atualiza(atual); 
           Toast.makeText(getBaseContext(), "Word updated!", Toast.LENGTH_LONG).show(); 
          } 
          while(this.dh.select(atual) == false){ 
           this.dh.insert(atual); 
           Toast.makeText(getBaseContext(), "Word added!", Toast.LENGTH_LONG).show(); 
          } 
         } 
        } 
        List<String> words = this.dh.selectAll(); 
        StringBuilder sb = new StringBuilder(); 
        sb.append("Set of words:\n\n"); 
        for (String w : words) { 
         sb.append(w); 
         sb.append(" ");       

        } 
        txtView.setText(sb.toString()); 
       }     
     }    
    } 

DataHelper.java

package com.sys; 

import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.database.sqlite.SQLiteStatement; 
import android.util.Log; 
import android.widget.Toast; 

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

public class DataHelper { 

private static final String DATABASE_NAME = "sms.db"; 
private static final int DATABASE_VERSION = 1; 
private static final String TABLE_NAME = "words"; 

private Context context; 
private SQLiteDatabase db; 

private SQLiteStatement insertStmt; 
private SQLiteStatement updateStmt; 
private static final String INSERT = "insert into " 
    + TABLE_NAME + "(word, cont) values (?, 1)"; 

public DataHelper(Context context) { 
    this.context = context; 
    OpenHelper openHelper = new OpenHelper(this.context); 
    this.db = openHelper.getWritableDatabase();   
    //openHelper.onUpgrade(db, 1, 2); 
    this.insertStmt = this.db.compileStatement(INSERT); 
} 

public long insert(String word) { 
    this.insertStmt.bindString(1, word);    
    return this.insertStmt.executeInsert(); 
} 

public void atualiza(String word){ 
    this.db.execSQL("UPDATE words SET cont = cont + 1 WHERE (word= ?)", new String[] {word});  
} 

public void deleteAll() { 
    this.db.delete(TABLE_NAME, null, null); 
} 

public boolean select(String wrd) { 
    String word; 
    Cursor cursor = this.db.query(TABLE_NAME, new String[] {"word"}, "word like ?", new String[] {wrd} , null, null, null); 
    if (cursor.moveToFirst()) { 
    do { 
     word = cursor.getString(0); 
    } while (cursor.moveToNext()); 
    } 
    if (cursor != null && !cursor.isClosed()) { 
    cursor.close();   
    return true;   
    }else{ 
     return false; 
    } 
} 

public List<String> selectMaxCont(){  
    List<String> list = new ArrayList<String>(); 
    Cursor cursor = this.db.query(TABLE_NAME, new String[]{"word"}, null, null, null, null, "cont desc"); 
    if(cursor.moveToFirst()){ 
     do{ 
    list.add(cursor.getString(0)); 
     }while(cursor.moveToNext()); 
    } 
    if(cursor != null && !cursor.isClosed()){ 
     cursor.close(); 
    } 
    return list; 
} 

public List<String> selectAll() { 
     List<String> list = new ArrayList<String>(); 
     Cursor cursor = this.db.query(TABLE_NAME, new String[] { "word" }, null, null, null, null, "cont desc"); 
     if (cursor.moveToFirst()) { 
     do { 
      list.add(cursor.getString(0).toUpperCase()); 
     } while (cursor.moveToNext()); 
     } 
     if (cursor != null && !cursor.isClosed()) { 
     cursor.close(); 
     } 
     return list; 
    } 

private static class OpenHelper extends SQLiteOpenHelper { 

    OpenHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
    db.execSQL("CREATE TABLE " + TABLE_NAME + "(id INTEGER PRIMARY KEY, word TEXT, cont INTEGER)");   
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    Log.w("SMS Words Database", "Upgrading database, this will drop tables and recreate."); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
    onCreate(db); 
    } 
} 
} 

回答

1

您可以将OnCreate()中的大部分代码移动到您的活动中的onResume中。基本上,您应该查询onResume中的内容解析器,以便在您的活动处于前台时获得全新的数据集。没有这个,你就会在创建活动时得到一个快照。当你进入短信界面时,它会暂停,然后当你回到它时恢复。即使您切换应用程序,它仍然还活着,因此只有在活动被终止或完成后才会调用onCreate,然后进行修改。

因此,简单地将ContentResolver.query()移动到onResume。并在那里显示你的状态。

+0

男人它工作得很好!非常感谢! – rogcg 2010-10-26 05:04:24