我正在编写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.]", ""));
答案 0 :(得分: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);
将包中的参数传递给被调用的活动。
HTH!
答案 1 :(得分:1)
您的问题有两种简单的解决方案,
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`
并从AndroidListViewActivity中删除public int getDay()
方法,因为它引用了AndroidListViewActivity的另一个对象。
答案 2 :(得分:1)
尝试做i.putExtra(“产品”,产品);在startActivity(i)之前;
答案 3 :(得分:0)
在您的活动A中,您编写了getter方法,但没有设置setter方法来设置代码中的day值。只需编写setter方法并设置day的值。
public void setDay(int p_day)
{
day=p_day;
}
将变量day设为静态。设置日值后,尝试将其设置为活动B. 我希望这会对你有所帮助。