2017-01-28 8 views
1

Ich habe eine Anwendung, die Json verwendet, um Daten vom Server herunterladen und zeigt es in einem ListView durch folgende this tutorial. Aber jetzt möchte ich diesen Prozess in den SplashScreen beim Laden und dann senden Sie alle heruntergeladenen Daten zu Hauptaktivität. Wie kann man das erreichen? Danke.AsyncTask in SplashScreen

Mein 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(); 

    } 
} 
} 

Schauspieler Adapter

package tutorial.json.com.jsonparsingtutorial; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.AsyncTask; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

import java.io.InputStream; 
import java.util.ArrayList; 

public class ActorAdapter extends ArrayAdapter<Actors> { 
ArrayList<Actors> actorList; 
LayoutInflater vi; 
int Resource; 
ViewHolder holder; 

public ActorAdapter(Context context, int resource, ArrayList<Actors> objects) { 
    super(context, resource, objects); 
    vi = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    Resource = resource; 
    actorList = objects; 
} 


@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // convert view = design 
    View v = convertView; 
    if (v == null) { 
     holder = new ViewHolder(); 
     v = vi.inflate(Resource, null); 
     holder.imageview = (ImageView) v.findViewById(R.id.ivImage); 
     holder.tvName = (TextView) v.findViewById(R.id.tvName); 
     holder.tvDescription = (TextView) v.findViewById(R.id.tvDescriptionn); 
     holder.tvDOB = (TextView) v.findViewById(R.id.tvDateOfBirth); 
     holder.tvCountry = (TextView) v.findViewById(R.id.tvCountry); 
     holder.tvHeight = (TextView) v.findViewById(R.id.tvHeight); 
     holder.tvSpouse = (TextView) v.findViewById(R.id.tvSpouse); 
     holder.tvChildren = (TextView) v.findViewById(R.id.tvChildren); 
     v.setTag(holder); 
    } else { 
     holder = (ViewHolder) v.getTag(); 
    } 
    holder.imageview.setImageResource(R.drawable.ic_launcher); 
    new DownloadImageTask(holder.imageview).execute(actorList.get(position).getImage()); 
    holder.tvName.setText(actorList.get(position).getName()); 
    holder.tvDescription.setText(actorList.get(position).getDescription()); 
    holder.tvDOB.setText("B'day: " + actorList.get(position).getDob()); 
    holder.tvCountry.setText(actorList.get(position).getCountry()); 
    holder.tvHeight.setText("Height: " + actorList.get(position).getHeight()); 
    holder.tvSpouse.setText("Spouse: " + actorList.get(position).getSpouse()); 
    holder.tvChildren.setText("Children: " + actorList.get(position).getChildren()); 
    return v; 

} 

static class ViewHolder { 
    public ImageView imageview; 
    public TextView tvName; 
    public TextView tvDescription; 
    public TextView tvDOB; 
    public TextView tvCountry; 
    public TextView tvHeight; 
    public TextView tvSpouse; 
    public TextView tvChildren; 

} 

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { 
    ImageView bmImage; 

    public DownloadImageTask(ImageView bmImage) { 
     this.bmImage = bmImage; 
    } 

    protected Bitmap doInBackground(String... urls) { 
     String urldisplay = urls[0]; 
     Bitmap mIcon11 = null; 
     try { 
      InputStream in = new java.net.URL(urldisplay).openStream(); 
      mIcon11 = BitmapFactory.decodeStream(in); 
     } catch (Exception e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return mIcon11; 
    } 

    protected void onPostExecute(Bitmap result) { 
     bmImage.setImageBitmap(result); 
    } 

} 
} 

Schauspieler Klasse

package tutorial.json.com.jsonparsingtutorial; 

public class Actors { 

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; 
} 


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; 
} 

} 
+0

Nun, Sie Arraylist mit Absicht http passieren kann://stackoverflow.com/questions/21250339/how-to-pass-arraylistcustomeobject-from-one-activity-to-another –

+0

versuchte es, aber App stürzt ab. Es wäre von großer Hilfe, wenn Sie zeigen könnten, was zu tun ist –

Antwort

3

Sie müssen Creat e SplashScrenActivity und laden Sie die Daten mit JSONAsyncTask herunter. Sobald Sie die Antwort erhalten, müssen Sie in onPost MainActivity starten und die heruntergeladenen Daten an MainActivity senden. Während JSONAsyncTask ausgeführt wird, können Sie ProgressBar in onPreExecute anzeigen und ProgressBar in onPostExecute ausblenden.

Um Daten an MainActivity zu senden, müssen Sie die Actor-Klasse die Parcelable-Schnittstelle implementieren. Sobald Schauspieler Klasse Parcel implementiert, ist dies, wie Sie Daten von SplashScreenActivity zu MainActivty senden können -

In SplashScreenActivity,

Intent intent = new Intent(SplashScreenActivity.this,MainActivty.class); 
intent.putParcelableArrayListExtra("ActorsList", actorsArrayList); 
startActivity(intent); 

In MainActivty onCreate() Sie ActorsList mit bekommen,

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

      ArrayList<Actors> actorsList = 
        getIntent().getParcelableArrayListExtra("ActorsList"); 
} 

Dies ist Ihre Parcelable implementierte Klasse,

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); 
    } 
} 

und in OnPostExecute brauchen Sie nur MainActivity wie unten zu beginnen,

Intent intent = new Intent(context, MainActivity.class); 
intent.putParcelableArrayListExtra("ActorsList", actorsArrayList); 
startActivity(intent); 

Für weitere Informationen, wie unter Klasse parcel lesen Sie bitte den Link zu machen - How can I make my custom objects Parcelable?

+0

können Sie mir bitte sagen, wie Parcelable Interface in der Actor Class –

+0

zu implementieren und werde ich die Daten in onPostExecute senden ??? –

+0

danke viel .... –