Java SplashScreen中的异步任务
我制作了一个应用程序,它使用json从服务器下载数据,并通过以下方式将其显示在ListView中 但现在我想在加载时在SplashScreen中执行此过程,然后将所有下载的数据发送到MainActivity。政府如何才能做到这一点。 多谢各位 我的主要活动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
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);