Дополнение не работает в Android - PullRequest
0 голосов
/ 16 марта 2011

Произошла очень странная вещь.У меня было приложение для расчета баллов по ответам.Это сработало очень хорошо, но, поскольку моя локализация (которая никак не влияет на мою систему подсчета очков), они не добавляются должным образом;вместо этого они добавляются в виде строки.

2 + 4 + 5 = 245, прежде чем это было 11 ... Любые идеи?

Пример:

            if(antworten.geo == 0)
            punktzahl += 10;
        else if(antworten.geo == 1)
            punktzahl += 8;
        else if(antworten.geo == 2)
            punktzahl += 4;

Вот так я получаю ответ от счетчика

    public class geo_listener implements OnItemSelectedListener{
    private boolean i = false;
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id){
        if(i == true){
            antworten.geo_str = parent.getSelectedItem().toString();
            antworten.geo = parent.getSelectedItemPosition();
            Toast chosen = Toast.makeText(parent.getContext(), parent.getSelectedItem().toString(), Toast.LENGTH_SHORT);
            chosen.show();}
        else{
            i = true;
            antworten.geo = parent.getSelectedItemPosition();
        }
    }
    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub

    }
}

Вот так я определяю все эти переменные и значения

    public class antworten{
    public static int rennen = 0; // 1 - Rennen 2 - Langsam
    public static String rennen_str;
    public static int next_item = 0;  //1 - Küchenmesser 2 - Pistole 3 - Stift 4 - Baseball-Schläger
    public static String next_item_str;
    public static int family = 0; // 1 - Ja  2 - Nein
    public static String family_str;
    public static int place = 0; // 1 - Straße 2 - Zuhause 3 - Arbeit 4 - Restaurant 5 - Öffentlicher Platz
    public static String place_str;
    public static int geo = 0; // 1 - Berg 2 - Meer 3 - Land
    public static String geo_str;
    public static int virus = 0; // 1 - Luft 2 - Speichel 3 - Blut 4 - Weiß nicht
    public static String virus_str;
    public static int walk = 0; //1 - Küchenmesser 2 - Pistole 3 - Stift 4 - Baseball-Schläger
    public static String walk_str;
    public static int super_m = 0; // 1 - Ja  2 - Nein
    public static String super_m_str;
    public static int apo = 0; // 1 - Ja 2 - Nein
    public static String apo_str;
    public static int death = 0; // 1 - Kopfschuss 2 - Abtrennen 3 - Gegengift 4 - Normale Todesarten
    public static String death_str;
    public static long punktzahl;
    public static String punk_str;
}

и вот так я подсчитываю баллы

    package com.zombies.survive;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class result_activity extends Activity {
    static Context mContext;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.result);
        String ant_ren = getApplicationContext().getString(R.string.ant1);
        String ant_itm = getApplicationContext().getString(R.string.ant2);
        String ant_fam = getApplicationContext().getString(R.string.ant3);
        String ant_plc = getApplicationContext().getString(R.string.ant4);
        String ant_geo = getApplicationContext().getString(R.string.ant5);
        String ant_vir = getApplicationContext().getString(R.string.ant6);
        String ant_wlk = getApplicationContext().getString(R.string.ant7);
        String ant_sup = getApplicationContext().getString(R.string.ant8);
        String ant_apo = getApplicationContext().getString(R.string.ant9);
        String ant_tot = getApplicationContext().getString(R.string.ant10);
        //Rennen Frage
            if(antworten.rennen == 0)
                antworten.punktzahl += 5;
            else
                antworten.punktzahl += 10;
        //Item Frage
            if(antworten.next_item == 0)
                antworten.punktzahl += 6;
            else if(antworten.next_item == 1)
                antworten.punktzahl += 10;
            else if(antworten.next_item == 2)
                antworten.punktzahl += 2;
            else if(antworten.next_item == 3)
                antworten.punktzahl += 5;
        //Familie Frage
            if(antworten.family == 0)
                antworten.punktzahl += 3;
            else
                antworten.punktzahl += 10;
        //Place Frage
            if(antworten.place == 0)
                antworten.punktzahl += 6;
            else if(antworten.place == 1)
                antworten.punktzahl += 2;
            else if(antworten.place == 2)
                antworten.punktzahl += 8;
            else if(antworten.place == 3)
                antworten.punktzahl += 10;
            else if(antworten.place == 4)
                antworten.punktzahl += 5;
            else if(antworten.place == 5)
                antworten.punktzahl += 6;
            else if(antworten.place == 6)
                antworten.punktzahl += 5;
        //Geo Frage
            if(antworten.geo == 0)
                antworten.punktzahl += 10;
            else if(antworten.geo == 1)
                antworten.punktzahl += 8;
            else if(antworten.geo == 2)
                antworten.punktzahl += 4;
        //Virus Frage
            if(antworten.virus == 0)
                antworten.punktzahl += 2;
            else if(antworten.virus == 1)
                antworten.punktzahl += 4;
            else if(antworten.virus == 2)
                antworten.punktzahl += 10;
            else if(antworten.virus == 3)
                antworten.punktzahl += 1;
        //Walk Frage
            if(antworten.walk == 0)
                antworten.punktzahl += 6;
            else if(antworten.walk == 1)
                antworten.punktzahl += 8;
            else if(antworten.walk == 2)
                antworten.punktzahl += 10;
            else if(antworten.walk == 3)
                antworten.punktzahl += 3;
            else if(antworten.walk == 4)
                antworten.punktzahl += 1;
        //Supermarkt Frage
            if(antworten.super_m == 0)
                antworten.punktzahl += 10;
            else if(antworten.super_m == 1)
                antworten.punktzahl += 5;
       //Apotheken Frage
            if(antworten.apo == 0)
                antworten.punktzahl += 10;
            else if(antworten.apo == 1)
                antworten.punktzahl += 5;
       //Töten Frage
            if(antworten.death == 0)
                antworten.punktzahl += 7;
            else  if(antworten.death == 1)
                antworten.punktzahl += 4;
            else  if(antworten.death == 2)
                antworten.punktzahl += 5;
            else  if(antworten.death == 3)
                antworten.punktzahl += 10; 
        antworten.punk_str = String.valueOf(antworten.punktzahl);
        TextView ergebniss = (TextView)findViewById(R.id.res_txt);
        ergebniss.setMovementMethod(new ScrollingMovementMethod());
        ergebniss.setText(R.string.wenn_eine_zombie_apokalypse_eintreten_w_rde_steht_die_chance_f_r_dich_zu_berleben_bei_ + antworten.punk_str + "%\n\n\n"+ant_ren+ant_itm+ant_plc+ant_fam+ant_geo+ant_vir+ant_wlk+ant_sup+ant_apo+ant_tot);

        Button back_but = (Button)findViewById(R.id.back_but);
        back_but.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent i = new Intent(result_activity.this,home.class);
                startActivity(i);

            }
        });
    }
}

Ответы [ 4 ]

1 голос
/ 16 марта 2011

Вы уверены, что переменная punktzahl, которую вы добавляете вместе, принадлежит к классу antworten? Вы пишете antworten.geo, но не antworten.punktzahl.

Если вы попытаетесь найти переменную в IDE, куда вы попали?

1 голос
/ 16 марта 2011

Если вы добавите строки «2», «4» и «5» вместе, вы получите «245», тогда как если вы добавите целые числа, вы получите 11. Ваша переменная «punktzahl» должна бытьдержа строку.

0 голосов
/ 16 марта 2011

Я думаю, что @thoredge находится на правильном пути.Попробуйте заменить эту строку:

antworten.punk_str = String.valueOf(antworten.punktzahl);

На это:

antworten.punk_str = antworten.punktzahl.getClass().getName();

Если punktzahl действительно long, вы должны получить синтаксическую ошибку.В противном случае вы увидите, что класс Java и Android думают, что это на самом деле.

Есть два способа, которыми я могу думать о том, что он может оказаться другим типом.Во-первых, как подсказывает @thoredge, вы фактически не получаете класс antworten.Возможно ли, что у вас есть два разных класса с одинаковыми именами в разных пакетах вашего проекта?

Может быть com.zombies.survive.antworten и com.zombies.antworten?

Возможно, вы смотрите настарая копия antworten?Возможно, он не был перекомпилирован, и более ранняя версия фактически использовала String.Попробуйте сделать make-clean / build-all (Проект> Очистить в Eclipse).Попробуйте перезапустить вашу IDE.Попробуйте удалить источник или даже проект и вывести его из-под контроля исходного кода с нуля.

Последнее, о чем я могу подумать, это то, что это может быть проблемой Classpath.Есть ли вероятность, что у вас есть jar-файл в проекте с классом «antworten», который вы могли бы получить вместо того, который вы ожидаете?В прошлом я видел некоторые очень странные вещи, например, когда в WebSphere были установлены два приложения, и они использовали разные версии одной и той же библиотеки.На пути к классам были две разные версии одного и того же класса.Результат был полностью загадочным.У меня был очень неприятный день, когда я помогал коллеге разобраться.Поэтому убедитесь, что с вами этого не происходит.

0 голосов
/ 16 марта 2011

Вы можете попробовать использовать .intValue():

int tempInt1 = 5;
int tempInt2 = 4;
int tempInt3 = tempInt2.intValue() + tempInt1.intValue();

или .add()

int tempInt1 = 5;
int tempInt2 = 4;
int tempInt3 = tempInt2.add(tempInt1);

У меня нет компилятора под рукой, поэтому я не знаю,это сработает, но это то, что нужно попробовать.

Кроме того, имейте в виду, что если вы когда-нибудь случайно добавите строку в int, результирующим значением будет строка!Это может быть причиной того, что у вас могут быть строки там, где вы их не ожидали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...