2015-08-19 71 views
0

我正在爲android製作壁紙應用程序,我對Muzei支持有問題,希望這裏的某個人可以幫助我查看我失蹤的內容。當我更新外部JSON時,Muzei數據庫不會更新

我有一個JSON文件,我的應用程序使用它來獲取壁紙網址並顯示圖片。它工作正常,它獲得正確的圖像。但是,如果我用更多條目和更多圖像更新JSON,那麼Muzei擴展仍然使用舊數據庫。我在想,也許它會緩存數據庫,並且不會出於任何原因更新它。讓它使用更新的JSON文件的唯一方法是清除我的應用程序的數據,並在Muzei中設置不同的擴展名,並使用我的擴展名重置Muzei。這不會非常用戶友好。

可能只是失明,但幫助將不勝感激。

ArtSource.java:

package com.main.walls.muzei; 

import android.content.Intent; 
import android.net.Uri; 
import android.util.Log; 

import com.google.android.apps.muzei.api.Artwork; 
import com.google.android.apps.muzei.api.RemoteMuzeiArtSource; 
import com.google.android.apps.muzei.api.UserCommand; 
import com.main.walls.utilities.Preferences; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.util.EntityUtils; 
import org.json.JSONArray; 
import org.json.JSONObject; 

import java.util.ArrayList; 
import java.util.Random; 

import walls.wallpaper.R; 

public class ArtSource extends RemoteMuzeiArtSource { 

    private WallsDatabase wdb; 
    private ArrayList<WallpaperInfo> wallslist; 
    private Preferences mPrefs; 

    private static final String ARTSOURCE_NAME = "Walls"; 
    private static final String JSON_URL = "http://pastebin.com/raw.php?i=VWTzhJ0N"; 
    private static final String MARKET_URL = "https://play.google.com/store/apps/details?id="; 
    private static final int COMMAND_ID_SHARE = 1337; 

    public ArtSource() { 
     super(ARTSOURCE_NAME); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     String command = intent.getExtras().getString("service"); 
     if (command != null) { 
      try { 
       onTryUpdate(UPDATE_REASON_USER_NEXT); 
      } catch (RetryException e) { 
       Log.d("MuzeiArtSource", Log.getStackTraceString(e)); 
      } 
     } 
     return super.onStartCommand(intent, flags, startId); 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     wdb = new WallsDatabase(getApplicationContext()); 
     wallslist = new ArrayList<>(); 

     mPrefs = new Preferences(ArtSource.this); 

     ArrayList<UserCommand> commands = new ArrayList<>(); 
     commands.add(new UserCommand(BUILTIN_COMMAND_ID_NEXT_ARTWORK)); 
     commands.add(new UserCommand(COMMAND_ID_SHARE, getString(R.string.justshare))); 

     setUserCommands(commands); 

    } 

    @Override 
    public void onCustomCommand(int id) { 
     super.onCustomCommand(id); 
     if (id == COMMAND_ID_SHARE) { 
      Artwork currentArtwork = getCurrentArtwork(); 
      Intent shareWall = new Intent(Intent.ACTION_SEND); 
      shareWall.setType("text/plain"); 

      String authorName = currentArtwork.getByline(); 
      String storeUrl = MARKET_URL + getResources().getString(R.string.package_name); 
      String iconPackName = getString(R.string.app_name); 

      shareWall.putExtra(Intent.EXTRA_TEXT, 
        getString(R.string.partone) + authorName + 
          getString(R.string.parttwo) + iconPackName + 
          getString(R.string.partthree) + storeUrl); 

      shareWall = Intent.createChooser(shareWall, getString(R.string.share_title)); 
      shareWall.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(shareWall); 
     } 
    } 

    @Override 
    protected void onTryUpdate(int reason) throws RetryException { 
     if (mPrefs.isFeaturesEnabled()) { 
      if (wallslist.size() == 0) 
       getWallpapersFromUrl(JSON_URL); 
      int i = getRandomInt(); 
      String token = wallslist.get(i).getWallURL(); 
      publishArtwork(new Artwork.Builder() 
        .byline(wallslist.get(i).getWallAuthor()) 
        .imageUri(Uri.parse(wallslist.get(i).getWallURL())) 
        .token(token) 
        .viewIntent(new Intent(Intent.ACTION_VIEW, Uri.parse(wallslist.get(i).getWallURL()))) 
        .build()); 
      scheduleUpdate(System.currentTimeMillis() + mPrefs.getRotateTime()); 
     } 
    } 

    private int getRandomInt() { 
     return new Random().nextInt(wallslist.size()); 
    } 

    private void getWallpapersFromUrl(String url) { 
     wallslist.clear(); 
     wallslist = wdb.getAllWalls(); 

     if (wallslist.size() == 0) { 
      try { 
       HttpClient cl = new DefaultHttpClient(); 
       HttpResponse response = cl.execute(new HttpGet(url)); 
       if (response.getStatusLine().getStatusCode() == 200) { 
        final String data = EntityUtils.toString(response.getEntity()); 
        JSONObject jsonobject = new JSONObject(data); 
        final JSONArray jsonarray = jsonobject.getJSONArray("wallpapers"); 
        wallslist.clear(); 
        wdb.deleteAllWallpapers(); 
        for (int i = 0; i < jsonarray.length(); i++) { 
         jsonobject = jsonarray.getJSONObject(i); 
         WallpaperInfo jsondata = new WallpaperInfo(
           jsonobject.getString("author"), 
           jsonobject.getString("url") 
         ); 
         wdb.addWallpaper(jsondata); 
         wallslist.add(jsondata); 
        } 
       } 
      } catch (Exception e) { 
       Log.d("Wallpapers", Log.getStackTraceString(e)); 
      } 
     } 
    } 
} 

不知道我是否需要任何其他代碼在這裏或不和的logcat沒有說什麼,就好像它是它的工作正常。如果您需要查看更多代碼,請告訴我。

感謝您的任何幫助。

回答

0

基本上我是對的,我只是愚蠢,錯過了最簡單的事情,它甚至與ArtSource.java沒有任何關係。我不在更新DATABASE_VERSION。我在1時離開它,所以當我更新應用程序時,它並沒有更新數據庫,因爲版本相同。

所以只需將private static final int DATABASE_VERSION = 1的值更改爲更高的數字,它應該很好。

簡單的錯誤,但很容易讓我猜。

相關問題