2014-01-07 71 views
1

我目前正在解析一个web文件,然后在完成时设置5个textview值,但是,每当活动关闭并重新打开时,它需要再次访问页面解析并显示值,我如何防止它不得不?防止每次打开活动时都必须加载TextViews?

它应该指出,数据变化相当有规律,所以我不能简单地保存价值永远。

public void gatherStockDetails(String symb) { 
    AsyncHttpClient client = new AsyncHttpClient(); 
    client.get("url" + symb + "&f=snpog", 
      new AsyncHttpResponseHandler() { 
       @Override 
       public void onSuccess(String response) { 
        Log.e("KFF-a", response); 
        stockinfo = response.split(","); 

        setTextViews(stockinfo[0].replaceAll("[^a-zA-Z0-9.%+ -]+", ""), 
          stockinfo[1].replaceAll("[^a-zA-Z0-9.%+ -]+", ""), 
          stockinfo[2].replaceAll("[^a-zA-Z0-9.%+ -]+", ""), 
          stockinfo[3].replaceAll("[^a-zA-Z0-9.%+ -]+", ""), 
          stockinfo[4].replaceAll("[^a-zA-Z0-9.%+ -]+", "")); 
       } 

       @Override 
       public void onFailure(Throwable arg0, String arg1) { 
        super.onFailure(arg0, arg1); 
       } 

      }); 
} 

public void setTextViews(String Symbol, String Name, String PClose, String Open, String Low) { 
     final Animation in = new AlphaAnimation(0.0f, 1.0f); 
     in.setDuration(500); 

     tvName.setText(Name.replace("Corpora", "Corporation")); 
     tvName.startAnimation(in); 

     tvSymbol.setText(Symbol); 
     tvSymbol.startAnimation(in); 

     tvSymbol.setText(PClose); 
     tvPClose.startAnimation(in); 

     tvLow.setText(Low); 
     tvLow.startAnimation(in); 

     tvOpen.setText(Open); 
     tvOpen.startAnimation(in); 
    } 

对不起,我没有提到,这是在片段上的活动,因而不存在onRestoreInstance状态。

+0

参见[传输数据使用同步适配器(http://developer.android.com/training/sync-adapters/index.html) – ramaral

回答

0

也许你应该把你TextViews在OnCreate中,这里是一个参考图片:

Process lifespan

这显示了不同的模块被加载,并在一个不错的主意是把你的模块不总是需要重新加载。

图像是由另计算器线程贷款,在这里:Difference between onCreate()and onStart()

+0

这就是它的确切位置,在OnCreate – Broak

0

您可以使用sharedPreferences。使用布尔值来表示不希望页面再次被解析并保存您获取的textView文本。现在每次打开活动时,检查该布尔值是否为真,如果是,请从sharedPreference中取值,并将它们分配给textViews。

如果布尔值为false,则解析页面。每当你再次解析页面时,用新的值替换旧的值。这样你就不必一次又一次解析页面。

0

也许你可以在SharedPreferences中保存一些标志,这样你就可以验证标志了。

public void DataDownloaded() 
{ 
SharedPreferences sharedPreferences = getSharedPreferences(); 
SharedPreferences.Editor editor = sharedPreferences.edit(); 
editor.putBoolean("DataDownloaded", true); 
editor.commit();  
} 

public Boolean isDataDownloaded() 
{ 
SharedPreferences sharedPreferences = getSharedPreferences(); 
return sharedPreferences.getBoolean("DataDownloaded", false); 
} 

并只是在onCreate()和onResume()重写方法中进行验证。

if(!isDataDownloaded) 
{ 
//all your cool stuff 
} 
+0

问题是则确定当偏好应该被删除以获得新的价值。 – Broak

+0

如果您想要与网络进行一些实时连接,您应该使用推送服务,否则您可以使用aSyncTask来同步每次您认为适合的数据。 – Aiapaec

相关问题