2013-02-07 2 views
1

XML 파일을 구문 분석하고 이미지와 textviews를로드하고 목록보기에 표시하려고 시도하고 있지만 getView 메소드에서 이미지를로드하려고 할 때마다 애플리케이션을 닫을지라도 그것을 똑같이 또한 빨리하는 것을 시도하십시오. Iam은 스레드에서 그것을 수행하는 것에 지쳐 있고 누군가가 해결할 수 있다면 5 시간 동안 도움을 청합니다. 여기에 두 개의 클래스 파일이 있습니다.안드로이드는 URL에서 이미지로드에 응답하지 않습니다

class NewsRowAdapter 

public class NewsRowAdapter extends ArrayAdapter<Item> 
{ 
    LoadingImage loadingImage; 

    Bitmap bitmap = null; 

    private Activity activity; 

    private List<Item> items; 

    private Item objBean; 

    private int row; 

    public NewsRowAdapter(Activity act, int resource, List<Item> arrayList) 
    { 

     super(act, resource, arrayList); 

     this.activity = act; 

     this.row = resource; 

     this.items = arrayList; 


    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) 
    { 
     View view = convertView; 

     final ViewHolder holder; 

     if (view == null) 
     { 

      LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

      view = inflater.inflate(row, null); 

      holder = new ViewHolder(); 

      view.setTag(holder); 

     } else 
     { 
      holder = (ViewHolder) view.getTag(); 
     } 

     if ((items == null) || ((position + 1) > items.size())) 

      return view; 

     objBean = items.get(position); 

     holder.tvTitle = (TextView) view.findViewById(R.id.tvtitle); 

     holder.tvDesc = (TextView) view.findViewById(R.id.tvdesc); 

     holder.tvDate = (TextView) view.findViewById(R.id.tvdate); 

     holder.imgView = (ImageView) view.findViewById(R.id.image); 

     holder.pbar = (ProgressBar) view.findViewById(R.id.pbar); 

     if (holder.tvTitle != null && null != objBean.getTitle() && objBean.getTitle().trim().length() > 0) 
     { 
      holder.tvTitle.setText(Html.fromHtml(objBean.getTitle())); 
     } 
     if (holder.tvDesc != null && null != objBean.getDesc() && objBean.getDesc().trim().length() > 0) 
     { 
      holder.tvDesc.setText(Html.fromHtml(objBean.getDesc())); 
     } 
     if (holder.tvDate != null && null != objBean.getPubdate() && objBean.getPubdate().trim().length() > 0) 
     { 
      holder.tvDate.setText(Html.fromHtml(objBean.getPubdate())); 
     } 
     if (holder.imgView != null) 
     { 
      if (null != objBean.getLink() && objBean.getLink().trim().length() > 0) 
      { 
       final ProgressBar pbar = holder.pbar; 

       pbar.setVisibility(View.INVISIBLE); 


       //---------CHANGES MADE FOR LOADING IMAGE----------// 

       Log.d("IMAGE NULL----------", objBean.getLink()); 


       //loadBitmap(objBean.getLink()); 

       /*new Thread() 
       { 
        public void run() 
        {*/ 
         try 
         { 
          URL linkurl = new URL(objBean.getLink()); 

          bitmap = BitmapFactory.decodeStream(linkurl.openConnection().getInputStream()); 

          holder.imgView.setImageBitmap(bitmap); 

         } catch (MalformedURLException e) 
         { 
          e.printStackTrace(); 

         } catch (IOException e) 
         { 
          e.printStackTrace(); 
         } 
        /*} 
       }.start();*/ 



      } else 
      { 
       holder.imgView.setImageResource(R.drawable.ic_launcher); 
      } 
     } 

     return view; 
    } 


    //------LOADING IMAGE FROM URL------// 


    public static Bitmap loadBitmap(String url) 
    { 
     Bitmap bitmap = null; 

     final AndroidHttpClient client = AndroidHttpClient.newInstance("Android"); 
     final HttpGet getRequest = new HttpGet(url); 

     try 
     { 
      HttpResponse response = client.execute(getRequest); 
      final int statusCode = response.getStatusLine().getStatusCode(); 
      if (statusCode != HttpStatus.SC_OK) 
      { 
       Log.d("ImageDownloader", "Error " + statusCode + " while retrieving bitmap from " + url); 
       return null; 
      } 

      final HttpEntity entity = response.getEntity(); 
      if (entity != null) 
      { 
       InputStream inputStream = null; 
       try 
       { 
        inputStream = entity.getContent(); 

        bitmap = BitmapFactory.decodeStream(inputStream); 



       } finally 
       { 
        if (inputStream != null) 
        { 
         inputStream.close(); 
        } 
        entity.consumeContent(); 
       } 
      } 
     } catch (Exception e) 
     { 
      // Could provide a more explicit error message for IOException or IllegalStateException 
      getRequest.abort(); 

      Log.d("Error while retrieving bitmap from " + url, e.toString()); 
     } finally 
     { 
      if (client != null) 
      { 
       client.close(); 
      } 
     } 


     return bitmap; 
    } 




    public class ViewHolder 
    { 

     public TextView tvTitle, tvDesc, tvDate; 
     private ImageView imgView; 
     private ProgressBar pbar; 

    } 

} 

메인 클래스는 다음과 같습니다

클래스 MainActivity 다른 thread.It 논리를 검색

public class MainActivity extends Activity implements OnItemClickListener 
{ 
    private static final String rssFeed = /*"https://www.dropbox.com/s/t4o5wo6gdcnhgj8/imagelistview.xml?dl=1"*/"http://78.46.34.27/kapapps/newparsedtransaction.xml"; 

    List<Item> arrayOfList; 
    ListView listView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.mainnewtransaction); 

     listView = (ListView) findViewById(R.id.listview); 
     listView.setOnItemClickListener(this); 

     if (Utils.isNetworkAvailable(NewTransactionActivity.this)) 
     { 
      new MyTask().execute(rssFeed); 
     } else 
     { 
      showToast("No Network Connection!!!"); 
     } 

    } 

    // My AsyncTask start... 

    class MyTask extends AsyncTask<String, Void, Void> 
    { 

     ProgressDialog pDialog; 

     @Override 
     protected void onPreExecute() 
     { 
      super.onPreExecute(); 

      pDialog = new ProgressDialog(NewTransactionActivity.this); 
      pDialog.setTitle("Latest Transaction"); 
      pDialog.setMessage("Loading... Please wait"); 
      pDialog.show(); 

     } 

     @Override 
     protected Void doInBackground(String... params) 
     { 
      arrayOfList = new NamesParser().getData(params[0]); 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) 
     { 
      super.onPostExecute(result); 



      if (null == arrayOfList || arrayOfList.size() == 0) 
      { 

       showToast("No data found from web!!!"); 

       NewTransactionActivity.this.finish(); 

      } else 
      { 

       // check data... 
       /* 
       * for (int i = 0; i < arrayOfList.size(); i++) 
       * { 
       * Item item = arrayOfList.get(i); System.out.println(item.getId()); 
       * System.out.println(item.getTitle()); 
       * System.out.println(item.getDesc()); 
       * System.out.println(item.getPubdate()); 
       * System.out.println(item.getLink()); 
       * } 
       */ 
       for(int i = 0 ; i < arrayOfList.size() ; i++) 
       { 
        Item item = arrayOfList.get(i); 
        Log.d("ID NEWTRANSACTION ACTIVITY ------>" , item.getId()); 
        Log.d("TITLE NEWTRANSACTION ACTIVITY ------>" , item.getTitle()); 
        Log.d("DESC NEWTRANSACTION ACTIVITY ------>", item.getDesc()); 
        Log.d("LINK NEWTRANSACTION ACTIVITY ------>", item.getLink()); 
       } 

       setAdapterToListview(); 


      } 


      if (null != pDialog && pDialog.isShowing()) 
      { 
       pDialog.dismiss(); 
      } 




     } 
    } 

    @Override 
    public void onItemClick(AdapterView<?> parent , View view , int position , long id) 
    { 
     Item item = arrayOfList.get(position); 
     Intent intent = new Intent(NewTransactionActivity.this, DetailActivity.class); 
     intent.putExtra("url", item.getLink()); 
     intent.putExtra("title", item.getTitle()); 
     intent.putExtra("desc", item.getDesc()); 


     Log.d("IMAGE_URL------>" , item.getLink()); 
     startActivity(intent); 
    } 

    public void setAdapterToListview() 
    { 
     NewsRowAdapter objAdapter = new NewsRowAdapter(NewTransactionActivity.this , R.layout.row, arrayOfList); 
     listView.setAdapter(objAdapter); 
    } 

    public void showToast(String msg) 
    { 

    } 


} 
+1

networkonuithread. 하지마. – njzk2

답변

1

합니까 이미지는 ANR을 얻고있는 이유 이미지를로드하는 데 너무 많은 시간을하고있다.

0

단일 작업자 스레드를 사용하고 작업의 onPause()를 중지 할 수 있습니다. 좋은 방법은 SingleThread Executor 서비스를 사용하여 이미지를로드하는 것입니다.

여기에 예를 들어 https://stackoverflow.com/a/14579365/1366471

0

나는 Prime 라이브러리에서 RemoteImageView를 사용하는 것이 좋습니다입니다. 그것은 당신의 일을 많이 줄입니다. 레이아웃에서

, com.handlerexploit.prime.widgets.RemoteImageView와 코드에 ImageView을 대체하여 홀더 클래스에 RemoteImageViewImageView을 변경합니다. getView 방법에

,

holder.imgView = (RemoteImageView) view.findViewById(R.id.image); 
//... 
holder.imgView.setImageURL(objBean.getLink()); 
관련 문제