Java 将数组传递给另一个类和异步任务
大家好,我对AsyncTask和字符串数组有问题。。。 我有一个喷溅屏 SplashScreen.java:Java 将数组传递给另一个类和异步任务,java,android,Java,Android,大家好,我对AsyncTask和字符串数组有问题。。。 我有一个喷溅屏 SplashScreen.java: public class SplashScreen extends Activity { private boolean mIsBackButtonPressed; private static final int SPLASH_DURATION = 6000; //6 seconds private Handler myhandler; int thread; public Str
public class SplashScreen extends Activity {
private boolean mIsBackButtonPressed;
private static final int SPLASH_DURATION = 6000; //6 seconds
private Handler myhandler;
int thread;
public String[] lista = new String[200];
public String[] Compagnia = new String[200];
public String[] CodiceVolo = new String[200];
public String[] Citta = new String[200];
public String[] OraPrevista = new String[200];
public String[] OraStimata = new String[200];
public String[] StatoVolo = new String[200];
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.splashscreen);
new MyTask().execute("");
myhandler = new Handler();
// run a thread to start the home screen
myhandler.postDelayed(new Runnable()
{
@Override
public void run()
{
finish();
if (!mIsBackButtonPressed)
{
// start the home activity
// Intent intent = new Intent(SplashScreen.this, MainActivity.class);
// SplashScreen.this.startActivity(intent);
}
}
}, SPLASH_DURATION);
}
//handle back button press
@Override
public void onBackPressed()
{
mIsBackButtonPressed = true;
super.onBackPressed();
}
public class MyTask extends AsyncTask<String, Void, String> {
ProgressDialog prog;
String info;
@Override
protected void onPreExecute() {
prog = new ProgressDialog(SplashScreen.this);
prog.setMessage("Connessione in corso...");
prog.show();
prog.setCanceledOnTouchOutside(false);
prog.setCancelable(false);
thread = 0;
}
@Override
protected String doInBackground(String... params) {
try {
org.jsoup.nodes.Document doc = Jsoup.connect("http://s.eu").timeout(7*1000).get();
org.jsoup.nodes.Element tabella = doc.getElementsByClass("tabella-voli").first();
Iterator<org.jsoup.nodes.Element> iterator = tabella.select("td").iterator();
while(iterator.hasNext()){
thread++;
Compagnia[thread] = iterator.next().text();
CodiceVolo[thread] = iterator.next().text();
Citta[thread] = iterator.next().text();
OraPrevista[thread] = iterator.next().text();
OraStimata[thread] = iterator.next().text();
StatoVolo[thread] = iterator.next().text();
System.out.println("SPLASH: "+CodiceVolo[thread]);
}
}catch (IOException e) {
e.printStackTrace();
}return info;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
prog.dismiss();
Bundle bundle = new Bundle();
bundle.putString("edttext", "From Activity");
arrivi fragobj = new arrivi();
fragobj.setArguments(bundle);
Intent intent = new Intent(SplashScreen.this, MainActivity.class);
// intent.putExtra("key",CodiceVolo[2]);
SplashScreen.this.startActivity(intent);
// CheckRow();
}
}// FINE THREAD
公共类SplashScreen扩展活动{
私有布尔值错误返回按钮按下;
私有静态最终int SPLASH_持续时间=6000;//6秒
私有处理器myhandler;
内螺纹;
公共字符串[]lista=新字符串[200];
公共字符串[]Compagnia=新字符串[200];
公共字符串[]CodiceVolo=新字符串[200];
公共字符串[]Citta=新字符串[200];
公共字符串[]OraPrevista=新字符串[200];
公共字符串[]OraStimata=新字符串[200];
公共字符串[]StatoVolo=新字符串[200];
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(窗口。功能\u无\u标题);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,
WindowManager.LayoutParams.FLAG(全屏);
setContentView(R.layout.splashscreen);
新建MyTask()。执行(“”);
myhandler=新处理程序();
//运行线程以启动主屏幕
myhandler.postDelayed(新的Runnable()
{
@凌驾
公开募捐
{
完成();
如果(!按错BackButton)
{
//开始家庭活动
//意向意向=新意向(SplashScreen.this,MainActivity.class);
//SplashScreen.this.StartTactivity(意图);
}
}
},飞溅时间);
}
//手柄后退按钮按下
@凌驾
public void onBackPressed()
{
mIsBackButtonPressed=true;
super.onBackPressed();
}
公共类MyTask扩展了AsyncTask{
进程对话程序;
字符串信息;
@凌驾
受保护的void onPreExecute(){
prog=新建进度对话框(SplashScreen.this);
prog.setMessage(“corso中的Connessione…”);
prog.show();
程序设置取消到外部(假);
程序设置可取消(错误);
线程=0;
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
试试{
org.jsoup.nodes.Document doc=jsoup.connect(“http://s.eu)超时(7*1000).get();
org.jsoup.nodes.Element tabella=doc.getElementsByClass(“tabella voli”).first();
迭代器迭代器=tabella.select(“td”).Iterator();
while(iterator.hasNext()){
线程++;
Compagnia[thread]=迭代器.next().text();
CodiceVolo[thread]=迭代器.next().text();
Citta[thread]=迭代器.next().text();
OraPrevista[thread]=迭代器.next().text();
OraStimata[thread]=迭代器.next().text();
StatoVolo[thread]=迭代器.next().text();
System.out.println(“SPLASH:+CodiceVolo[thread]);
}
}捕获(IOE异常){
e、 printStackTrace();
}退货信息;
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
程序解除();
Bundle=新Bundle();
bundle.putString(“文本”,“来自活动”);
arrivi fragobj=新的arrivi();
fragobj.setArguments(bundle);
意向意向=新意向(SplashScreen.this,MainActivity.class);
//意向。额外(“关键”,CodiceVolo[2]);
SplashScreen.this.StartTactivity(意图);
//CheckRow();
}
}//细线
我想在另一个类中打印我的数组。
在arrivi.java中:
public class arrivi extends Fragment {
ListView list;
List<RowItem> rowItems;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View arrivi = inflater.inflate(R.layout.arrivi, container, false);
String strtext = getArguments().getString("edttext");
System.out.println("CODCICE VOLO: "+strtext);
return arrivi;
}
公共类arrivi扩展片段{
列表视图列表;
列出项目;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图arrivi=充气机。充气(R.layout.arrivi,容器,假);
字符串strtext=getArguments().getString(“edttext”);
System.out.println(“codcicevolo:+strtext”);
返回阿里维;
}
这对我不起作用。。。
崩溃我的应用程序。。。
谢谢你,SplashScreen是一个活动类。这样做是错误的 引用拉格哈夫·苏德的话@ 通过将一个活动视为一个普通的Java类,您将得到一个null 由于活动中的大多数方法都是在其上下文上调用的,因此 将获得空指针异常,这就是应用程序崩溃的原因 相反,您可以使用
Intent
将值从SplashScreen
传递到MainActivity
Intent intent = new Intent(SplashScreen.this, MainActivity.class);
intent.putExtra("key",CodiceVolo[2])
SplashScreen.this.startActivity(intent);
主要活动
String value = getIntent().getStringExtra("key");
编辑:
将数据对象从一个活动传递到另一个活动很简单,如果您想传递数组对象,那么应该序列化该对象 ArrayList数组=新的ArrayList() 要传递数组对象,必须使用intent PUTTERA,例如: 意向意向=新意向(SplashScreen.this,MainActivity.class) intent.putExtra(“键”,数组); 星触觉(意向) //putExtra(“key”,array);如果模型类未序列化,将显示错误 如: 公共类模型实现了可序列化{
String name;
String address;
//generate your getter setter and set data in to this.
}
//要将数据导入另一个类,只需使用
ArrayList数据=(ArrayList)getIntent().getSerializable(“键”)
现在您可以使用此数据对象玩arround。如果我想在片段中传递数组?在片段中传递数组???。详细说明。您仍然可以在片段中使用intent。我可以将数组直接传递到片段并启动mainactivity,还是必须在mainactivity之前传递?@roxdragon我不明白您想要什么。您可以在f中使用intentFragment启动一个活动。你说“我必须在mainactivity之前通过”是什么意思?我不知道我有一个运行异步任务的splashscreen。-填充数组,我想将所有数组传递到类中:公共类arrivi extends Fragment{
String name;
String address;
//generate your getter setter and set data in to this.