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

大家好,我对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 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.