0

私は Android アプリケーションをプログラミングしていますが、少し問題が発生しました。クラス B のクラス A から値を取得しようとしていますが、正しい値が返されません。

理解を深めるためのコードは次のとおりです(英語が下手で申し訳ありません)!

クラスA

package com.androidhive.androidlistview;

//import

public class AndroidListViewActivity extends ListActivity {

    int day;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // storing string resources into Array
        String[] adobe_products = getResources().getStringArray(R.array.adobe_products);

        // Binding Array to ListAdapter
        this.setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.label, adobe_products));

        ListView lv = getListView();

        // listening to single list item on click
        lv.setOnItemClickListener(new OnItemClickListener() {
          public void onItemClick(AdapterView<?> parent, View view,
              int position, long id) {

              // selected item 
              String product = ((TextView) view).getText().toString();

              // Launching new Activity on selecting single List Item
              Intent i = new Intent(getApplicationContext(), SingleListItem.class);
              day = Integer.parseInt(product.replaceAll("[^\\d.]", ""));
              System.out.println(day);
              //prints 1 When I click on the first list item, 2 When I click on the second, ...
              startActivity(i);
              // sending data to new activity
              i.putExtra("product", product);
          }
        });
    }
    public int getDay() {
        return day;
    }
}

クラスB

package com.androidhive.androidlistview;

//import

@SuppressLint({ "NewApi", "HandlerLeak" })
public class SingleListItem extends Activity {

    AndroidListViewActivity alva = new AndroidListViewActivity();

    int day;
    String url;
    String code;

    //others variables

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

        //Graphic

        new NetworkOperation().execute();

    }

    class NetworkOperation extends AsyncTask<Void, Void, String> {
        protected String doInBackground(Void... params) {
            Document doc;
            try {
                day = alva.getDay();
                System.out.println(day);
                //prints 0
                url = "http://www.planetehockey.com/calendrier.php?saison=45&div=9&club=&journee=" + day + "&jour=&mois=&page=0";
                doc = Jsoup.connect(url).get();
                //Récupère le texte d'une balise ayant bg_tableau pour class
                Elements getId = doc.getElementsByClass("bg_tableau");
                code = getId.text();
                code = code + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
                handler.sendEmptyMessage(1);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    }

    private Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {

            //other code

        }
    };
}

あなたのすべての答えに感謝します。それは私を大いに助けました:

問題を解決した方法:

クラスA

      i.putExtra("product", product);
      startActivity(i);

と:

クラスB

int day = Integer.parseInt(i.getStringExtra("product").replaceAll("[^\\d.]", ""));
4

4 に答える 4

1

クラス A では、アクティビティが呼び出された後にコンポーネントをバンドルしようとしています。

このように呼び出し関数を置きます..

Intent i = new Intent(getApplicationContext(), SingleListItem.class);
day = Integer.parseInt(product.replaceAll("[^\\d.]", ""));
System.out.println(day);

i.putExtra("product", product);
startActivity(i);

はパラメーターをバンドルに入れて、呼び出されたアクティビティーに渡します。

チッ!

于 2013-07-16T07:07:08.263 に答える
1

あなたの問題には2つの簡単な解決策があります。

1. Pass day values in intent to SingleListItem 

または

2. Make day as a Static member and use it with class Name like, 
   public static int day; and access it `AndroidListViewActivity.day` 

public int getDay()両方のアクティビティで AndroidListViewActivity の別のオブジェクトを参照するため、 AndroidListViewActivity からメソッドを削除します。

于 2013-07-16T07:07:18.770 に答える
1

i.putExtra("product", product); を実行してみてください。startActivity(i)の前に;

于 2013-07-16T07:07:27.037 に答える
0

アクティビティ A では、getter メソッドを記述しましたが、コードで day の値を設定するための setter メソッドは記述していません。セッターメソッドも書いて、日の値を設定するだけです。

 public void setDay(int p_day)
 {
     day=p_day;
 }

変数 day を静的にします。日の値を設定したら、アクティビティ B で取得してみてください。これがお役に立てば幸いです。

于 2013-07-16T07:44:52.270 に答える