Java SplashScreen中的异步任务

Java SplashScreen中的异步任务,java,android,json,android-asynctask,Java,Android,Json,Android Asynctask,我制作了一个应用程序,它使用json从服务器下载数据,并通过以下方式将其显示在ListView中 但现在我想在加载时在SplashScreen中执行此过程,然后将所有下载的数据发送到MainActivity。政府如何才能做到这一点。 多谢各位 我的主要活动 package tutorial.json.com.jsonparsingtutorial; import android.app.Activity; import android.net.ParseException; import an

我制作了一个应用程序,它使用json从服务器下载数据,并通过以下方式将其显示在ListView中 但现在我想在加载时在SplashScreen中执行此过程,然后将所有下载的数据发送到MainActivity。政府如何才能做到这一点。 多谢各位

我的主要活动

package tutorial.json.com.jsonparsingtutorial;

import android.app.Activity;
import android.net.ParseException;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.util.ArrayList;

public class MainActivity extends Activity {

ArrayList<Actors> actorsList;

ActorAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    actorsList = new ArrayList<Actors>();
    new JSONAsyncTask().execute("http://microblogging.wingnity.com/JSONParsingTutorial/jsonActors");

    ListView listview = (ListView)findViewById(R.id.list);
    adapter = new ActorAdapter(getApplicationContext(), R.layout.row, actorsList);

    listview.setAdapter(adapter);

    listview.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                                long id) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), actorsList.get(position).getName(), Toast.LENGTH_LONG).show();
        }
    });
}


public class JSONAsyncTask extends AsyncTask<String, Void, Boolean> {


    @Override
    protected Boolean doInBackground(String... urls) {
        try {

            //------------------>>
            HttpGet httppost = new HttpGet(urls[0]);
            HttpClient httpclient = new DefaultHttpClient();
            HttpResponse response = httpclient.execute(httppost);

            // StatusLine stat = response.getStatusLine();
            int status = response.getStatusLine().getStatusCode();

            if (status == 200) {
                HttpEntity entity = response.getEntity();
                String data = EntityUtils.toString(entity);


                JSONObject jsono = new JSONObject(data);
                JSONArray jarray = jsono.getJSONArray("actors");

                for (int i = 0; i < jarray.length(); i++) {
                    JSONObject object = jarray.getJSONObject(i);

                    Actors actor = new Actors();

                    actor.setName(object.getString("name"));
                    actor.setDescription(object.getString("description"));
                    actor.setDob(object.getString("dob"));
                    actor.setCountry(object.getString("country"));
                    actor.setHeight(object.getString("height"));
                    actor.setSpouse(object.getString("spouse"));
                    actor.setChildren(object.getString("children"));
                    actor.setImage(object.getString("image"));

                    actorsList.add(actor);
                }
                return true;
            }

            //------------------>>

        } catch (ParseException e1) {
            e1.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return false;
    }


    protected void onPostExecute(Boolean result) {
        adapter.notifyDataSetChanged();
        if(result == false)
            Toast.makeText(getApplicationContext(), "Unable to fetch data from server", Toast.LENGTH_LONG).show();

    }
}
}

您需要创建SplashScrenActivity并使用JSONAsyncTask下载数据,一旦收到响应,您必须在onPost中启动MainActivity并将下载的数据发送到MainActivity。在执行JSONAsyncTask时,可以在onPreExecute中显示ProgressBar,在onPostExecute中隐藏ProgressBar

要将数据发送到MainActivity,需要使Actor类实现Parcelable接口。一旦Actor类实现了Parcelable,这就是如何将数据从SplashScreenActivity发送到MainActivty-

在活动中,

Intent intent = new Intent(SplashScreenActivity.this,MainActivty.class);
intent.putParcelableArrayListExtra("ActorsList", actorsArrayList);
startActivity(intent);
在MainActivty onCreate()中,您可以使用

if (getIntent().hasExtra("ActorsList")) {

            ArrayList<Actors> actorsList =
                    getIntent().getParcelableArrayListExtra("ActorsList");
}
有关如何使课堂可随身携带的更多信息,请参阅以下链接-

您可以使用intent通过ArrayList,但应用程序正在崩溃。如果你能展示要记录的内容,这将是非常有帮助的。请告诉我如何在Actor类中实现可打包接口。好的,我运行这个程序时有一个问题,它工作正常,但是图像正在更改,直到加载正确的图像。你能建议我修复“图像正在更改”吗,你能详细描述一下闪烁的情况吗?我的意思是:位置的图像…位置4的图像必须直接有该图片,而不是位置1的图片,然后是位置2,然后是位置3,最后是位置4出现,但当原始应用程序启动时,不会发生这种闪烁
Intent intent = new Intent(SplashScreenActivity.this,MainActivty.class);
intent.putParcelableArrayListExtra("ActorsList", actorsArrayList);
startActivity(intent);
if (getIntent().hasExtra("ActorsList")) {

            ArrayList<Actors> actorsList =
                    getIntent().getParcelableArrayListExtra("ActorsList");
}
public class Actors implements Parcelable {

    private String name;
    private String description;
    private String dob;
    private String country;
    private String height;
    private String spouse;
    private String children;
    private String image;

    public Actors() {
        // TODO Auto-generated constructor stub
    }

    public Actors(String name, String description, String dob, String country,
                  String height, String spouse, String children, String image) {
        super();
        this.name = name;
        this.description = description;
        this.dob = dob;
        this.country = country;
        this.height = height;
        this.spouse = spouse;
        this.children = children;
        this.image = image;
    }


    protected Actors(Parcel in) {
        name = in.readString();
        description = in.readString();
        dob = in.readString();
        country = in.readString();
        height = in.readString();
        spouse = in.readString();
        children = in.readString();
        image = in.readString();
    }

    public static final Creator<Actors> CREATOR = new Creator<Actors>() {
        @Override
        public Actors createFromParcel(Parcel in) {
            return new Actors(in);
        }

        @Override
        public Actors[] newArray(int size) {
            return new Actors[size];
        }
    };

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getDob() {
        return dob;
    }

    public void setDob(String dob) {
        this.dob = dob;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public String getHeight() {
        return height;
    }

    public void setHeight(String height) {
        this.height = height;
    }

    public String getSpouse() {
        return spouse;
    }

    public void setSpouse(String spouse) {
        this.spouse = spouse;
    }

    public String getChildren() {
        return children;
    }

    public void setChildren(String children) {
        this.children = children;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeString(name);
        parcel.writeString(description);
        parcel.writeString(dob);
        parcel.writeString(country);
        parcel.writeString(height);
        parcel.writeString(spouse);
        parcel.writeString(children);
        parcel.writeString(image);
    }
}
Intent intent = new Intent(context, MainActivity.class);
intent.putParcelableArrayListExtra("ActorsList", actorsArrayList);
startActivity(intent);