2013-06-29 2 views
3

Я разрабатываю приложение, которое проверяет, доступно ли обновление. Проблема в том, что мое приложение не может распознать себя в последней версии.Android: проверьте, доступно ли обновление

У меня есть файл на моем сервере, и файл содержит последний номер версии (1.0.1). Моя версия приложения также 1.0.1, но когда я проверяю обновления, мое приложение указывает, что доступно обновление, в тексте говорится, что последняя и установленная версия 1.0.1.

Так вот мой код:

(checkupdatebutton) 
{ 
    setContentView(R.layout.updater); 


    DefaultHttpClient httpclient = new DefaultHttpClient(); 

    try { 
     HttpGet httppost = new HttpGet("http://myserver.com/latestversion.txt"); 
     HttpResponse response; 
     response = httpclient.execute(httppost); 
     HttpEntity ht = response.getEntity(); 
     BufferedHttpEntity buf = new BufferedHttpEntity(ht); 
     InputStream is = buf.getContent(); 
     BufferedReader r = new BufferedReader(new InputStreamReader(is,"UTF-8")); 
     StringBuilder total = new StringBuilder(); 
     String line; 
     while ((line = r.readLine()) != null) { 
      total.append(line + "\n"); 
      } 
      TextView versionupdnew = (TextView)findViewById(R.id.versionupdnew); 
      //Set text to value of my file (latestversion.txt) 
      versionupdnew.setText(total); 

      TextView installedversion = (TextView)findViewById(R.id.versionupdcur); 
      installedversion.setText(R.string.version); 

      TextView title = (TextView)findViewById(R.id.title); 
      if(installedversion.equals(versionupdnew)) 
      { 
      //Current version is latest 
     title.setText("No update needed!"); 
      Button buttonUpdate = (Button)findViewById(R.id.buttonUpdate); 
      buttonUpdate.setEnabled(false); 
      }else{ 
       title.setText("New version is available!"); 
      } 
      } catch (ClientProtocolException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
    } 
} 
+2

+1 для кодирования с 13 лет! – Daniel

+0

Можете ли вы предоставить снимок экрана? –

+0

+1 Очистить вопрос. –

ответ

1

Используйте SharedPreferences для хранения последней версии, в противном случае использование R.string.version всегда будет проверять версию, поставляемую с установленным apk, и когда будет загружена новая версия, она не обновит это.

Было бы проще, если бы вы сопоставили ваши версии целым числам, поэтому вам не нужно будет разбирать строку версии. Каждая новая версия будет на 1 больше последней.

  1. Получить текущую версию:

    // use preferences to get the current version, with default = 1 
    // (replace 1 with the version that came with the apk) 
    preferences.getInt("current_version", 1); 
    
  2. Получить версию с сервера.

  3. Проверьте версию сервера больше, чем текущая версия, и при необходимости исправьте:

    if (server_version > current_version) { 
        update(); 
        preferences_editor.putInt("current_version", server_version).commit(); 
    } 
    
  4. Теперь в следующий раз, вы проверяете, если обновление необходимо, вы будете проверять против самого последнего обновленная версия.

+0

Звучит неплохо, я постараюсь завтра. – user1475122

+0

Кажется, что ваш подход будет работать, если вы просто пытаетесь заставить все обновление приложения, но подход, который я дал, также будет работать, если вы просто пытаетесь обновить некоторые данные без обновления всего приложения. – eski

2

TextView.equals() не возвращает истину, когда текстовые значения двух ящиков равны. Вы захотите сравнить текстовые значения двух полей.

Например:

if(installedversion.getText().toString().equals(versionupdnew.getText().toString())) 

Обратите внимание, что функция TextView.getText() не возвращает StringAPI documentation состояния, что она возвращает CharSequence, однако, если он настроен на использование Spannable или Editable он может быть брошен к различного типа, используя toString() на этих типах, возвращает текстовое значение поля как String, и по моему опыту является самым надежным способом сравнить значения двух View s)

+0

Я получаю этот текст: ... – user1475122

+1

В этом случае вы Вероятно, вы захотите использовать [регулярные выражения] (http://docs.oracle.com/javase/tutorial/essential/regex/) или [парсер HTML] (http://jsoup.org/), чтобы извлечь значение со страницы. –

+0

Есть ли лучший способ сделать это? – user1475122

0

Для вас текущая проблема, вы сравниваете TextViews, а не строки, поэтому сравнение строк поможет.

Хотя я действительно предлагаю вам альтернативный подход,

-Вы можете установить небольшой API на сервере говорят «check_version»

-Вы передать текущий номер версии API, как: "www.myServer .com/check_version.php? v = 1,0.1"

-The API будет возвращать некоторые JSON, говоря

{ 
    status:"UPDATE_AVAILABLE", 
    message: "An update is available", 
    url: "http://play.google.com?xxxyyyzzz" 
} 

Здесь вы можете использовать „поле статус“, чтобы определить, есть ли обновление доступно .. он также может сообщить, если обновление является критическим или нет .. как вы можете иметь возможные значения

  • "UPDATE_AVAILABLE"

  • "UPDATE_REQUIRED"

  • "ПОСЛЕДНИЙ".

    Хотя сообщение и URL-адрес могут быть пустыми, если его «ПОСЛЕДНИЙ». Вся логика сравнения будет на сервере.

Смежные вопросы