2016-03-23 6 views
-1

Ich möchte eine Liste von Bitmap senden i von MySQL-Datenbank unter Verwendung von AsyncTask an das Fragment retreived Fragment_ListView.class, in diesem Fragment Klasse i zu wollen setze den adapter der listView mit dem bitmap token von asyncTask, aber ich weiß nicht wie ich das machen soll.wie Arraylist (Bitmap) von AsyncTask zu Fragment und verwenden Sie es in Arrayadapter senden

Async Aufgabe

@Override 
protected void onPostExecute(ArrayList<Bitmap> bitmapArrayList) { 
    super.onPostExecute(bitmapArrayList); 
    loading.dismiss(); 
    // now after getting images from server , i want to send this bitmapArrayList 
    // to Fragment_ListView where i set the adapter of the 
} 

@Override 
protected ArrayList<Bitmap> doInBackground(String... params) { 
    imageList = new ArrayList(); 
    String add1 = "http://192.168.1.11/save/load_image_from_db.php?id=1"; 
    String add2 = "http://192.168.1.11/save/load_image_from_db.php?id=2"; 
    String add3 = "http://192.168.1.11/save/load_image_from_db.php?id=3"; 
    URL url; 
    Bitmap image = null; 
    String[] adds = {add1, add2, add3}; 
    for (int i = 0; i < adds.length; i++) { 
     try { 
      url = new URL(adds[i]); 
      HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
      image = BitmapFactory.decodeStream(connection.getInputStream()); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     imageList.add(image); 
     image = null; 
    } 
    return imageList; 

OnCreate von MainActivity

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    listfrg = new Fragment_ListView(); 
    getFragmentManager().beginTransaction().add(R.id.frml, listfrg).commit(); 
} 

Fragment_ListView:

public class Fragment_ListView extends Fragment { 

ListView mListView; 
static ArrayList<Bitmap> bitmaps; 
static MySimpleArrayAdapter adapter; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.frglist, container, false); 
    mListView = (ListView) view.findViewById(R.id.listView); 
    bitmaps = new ArrayList<>(); 
    adapter = new MySimpleArrayAdapter(getActivity(), bitmaps); 
    mListView.setAdapter(adapter); 
    return view; 
} 

Antwort

0

Somet wie dies Hing,

Datei in AsyncTask

public interface BitMapArrayCallBack { 
    abstract void bitmapArray(ArrayList<Bitmap> bitmaps); 
} 

Dann eine neue Schnittstelle erstellen ... weiß, dass ich den Namen Ihrer Klasse nicht so gebe ich Ihnen die Klasse übernehmen ServerRequest

public class ServerRequest { 
    Context context; 

    public ServerRequest(Context context) { 
     this.context = context; 
    } 

    public void doAsyncTask(BitMapArrayCallBack bitmapCallback) { 
     new MyAsyncTask(bitmapCallback).execute(); 
    } 


    public class MyAsyncTask extends AsyncTask<Void, Void, Void> { 
     private BitMapArrayCallBack bitmapCallback; 
     public MyAsyncTask(BitMapArrayCallBack bitmapCallback) { 
      this.bitmapCallback = bitmapCallback; 
     } 
     //call do in background etc.. 
    @Override 
     protected void onPostExecute(ArrayList<Bitmap> bitmapArrayList) { 
      super.onPostExecute(bitmapArrayList); 
      loading.dismiss(); 
      bitmapCallback.bitmapArray(bitmapArrayList); 
      // This will hold and return your arraylist 
     } 
    } 

} 

Jetzt muss Ihre asynctask in der Fragmentliste aufrufen

public class Fragment_ListView extends Fragment { 

ListView mListView; 
static MySimpleArrayAdapter adapter; 
private ServerRequest serverRequest; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.frglist, container, false); 
    mListView = (ListView) view.findViewById(R.id.listView); 

    serverRequest = new ServerRequest(getActivity); 

    serverRequest.doAsyncTask(new BitMapArrayCallBack { 
     @Override 
     void bitMapArray(ArrayList<Bitmap> bitmaps) { 
      // in here you have access to the bitmaps array 

      adapter = new MySimpleArrayAdapter(getActivity(), bitmaps); 
      mListView.setAdapter(adapter); 
     } 

    }) 


    return view; 
} 
Verwandte Themen