2017-12-03 19 views
1

다음 코드가 있습니다. 이미지를 drawable 폴더 및 api에서 먼저로드해야합니다. getData() 메소드를 사용하여 이미지를 드로어 블 폴더에서 성공적으로로드합니다., URL에서 이미지를로드하고 gridview을 업데이트하는 방법을 모르겠습니다. 내가 방법을 확인하시기 바랍니다 내가 예를onPostexecute AsyncTask에서 gridview를 사용하는 방법

을 제시해주십시오 안드로이드의 새로운 안함 나이

도움이 난 방법 에 onPostExecute을 내 gridview에 코드를 언급 왜 응용 프로그램 충돌 주석 행 아래에있는 내 그리드를 업데이트 onPostExecute 방법

public class MainActivity extends AppCompatActivity { 
    private GridView gridView; 
    private GridViewAdapter gridAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     gridView = (GridView) findViewById(R.id.gridView); 
     gridAdapter = new GridViewAdapter(this, R.layout.grid_item_layout, getData()); 
     gridView.setAdapter(gridAdapter); 
     APICaller ob = new APICaller(); 
     ob.execute(); 
     gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
       ImageItem item = (ImageItem) parent.getItemAtPosition(position); 

       //Create intent 
       Intent intent = new Intent(MainActivity.this, abc.class); 
       intent.putExtra("title", item.getTitle()); 
       intent.putExtra("image", item.getImage()); 

       //Start details activity 
       startActivity(intent); 
      } 
     }); 
    } 

    /** 
    * Prepare some dummy data for gridview 
    */ 
    private ArrayList<ImageItem> getData() { 
     final ArrayList<ImageItem> imageItems = new ArrayList<>(); 
     TypedArray imgs = getResources().obtainTypedArray(R.array.image_ids); 
     for (int i = 0; i < imgs.length(); i++) { 
      Bitmap bitmap = BitmapFactory.decodeResource(getResources(), imgs.getResourceId(i, -1)); 
      imageItems.add(new ImageItem(bitmap, "Image#" + i)); 
     } 
     return imageItems; 
    } 

    private ArrayList<ImageItem> getData(appmodel[] data) { 
     Toast.makeText(getApplicationContext(), 
       data.toString(), Toast.LENGTH_LONG).show(); 
     final ArrayList<ImageItem> imageItems = new ArrayList<>(); 
     TypedArray imgs = getResources().obtainTypedArray(R.array.image_ids); 
     for (int i = 0; i < imgs.length(); i++) { 
      Bitmap bitmap = BitmapFactory.decodeResource(getResources(), imgs.getResourceId(i, -1)); 
      imageItems.add(new ImageItem(bitmap, "Image#" + i)); 
     } 
     return imageItems; 
    } 

class APICaller extends AsyncTask{ 

     protected void onPostExecute(Object result) 
     { 
      String data = (String)result;  
      Gson g = new Gson(); 
      Type t = new TypeToken<appmodel[]>(){}.getType(); 
      appmodel[] appm = (appmodel[])g.fromJson(data,t); 
     // gridView = (GridView) findViewById(R.id.gridView); 
    //  gridAdapter = new GridViewAdapter(getApplicationContext(), R.layout.grid_item_layout, getData()); 
    //  gridView.setAdapter(gridAdapter);    


     } 
    @Override 
    protected Object doInBackground(Object[] objects) { 

     HttpClient client = new DefaultHttpClient(); 
     HttpGet getlish = new HttpGet("http://test.abc.com/api/test"); 
     ResponseHandler<String> handler = new BasicResponseHandler(); 
     Object result = new Object(); 
     try { 
      result = client.execute(getlish,handler); 
     } 
     catch(Exception e) 
     { 


     } 
     return result; 
    } 
} 
} 

난의 프로그램에있어서 아래 JSON 데이터

protected void onPostExecute(Object result) 
     { 
      String data = (String)result;  
      Log.d("myTag", data); 
} 
를 사용 로그 확인

JSON

[ { 
     "apptype": 1, 
     "imagename": "test", 
     "imageurl": "http://test.abc.com/androidimages/test/test.jpg" 
     } 
    ] 
+0

를 사용하는 종속 다음은이

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); 

추가처럼 보인다 귀하의 코드는 조금 지저분합니다. 당신은'JSON'에서 구문 분석 URL을 원하고 gridview 어댑터로 다운로드할까요? – Yupi

답변

0

public class GridViewAdapter extends BaseAdapter{ 

    private ArrayList<ImageItem> mItemList; 

    public void updateItemList(ArrayList<ImageItem> newItemList){ 
     this.mItemList = newItemList; 
     notifyDataSetChanged(); 
    } 

} 

처럼 어댑터 클래스에 새로운 방법을 추가하고이 메도를 호출하고 새 목록을 설정 onPostExecute. 그래서 onPost 당신이 피카소 라이브러리를 사용할 수있는 URL을 사용하여 imagview로드하려면이

protected void onPostExecute(Object result) 
     { 
      String data = (String)result;  
      Gson g = new Gson(); 
      Type t = new TypeToken<appmodel[]>(){}.getType(); 
      appmodel[] appm = (appmodel[])g.fromJson(data,t); 
      gridAdapter.updateItemList(getData());   


     } 

처럼 보이는, 당신에 refrence 것이 피카소에게

compile 'com.squareup.picasso:picasso:2.5.2'