안드로이드 코드 질문

조회수 1176회

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

    client = new AsyncHttpClient();
    response = new BookResponse(MainActivity.this);

    editText = (EditText)findViewById(R.id.editText);
    button = (Button)findViewById(R.id.button);
    listView = (ListView)findViewById(R.id.listView);

    adapter = new BookAdapter(MainActivity.this, R.layout.book_item);
    listView.setAdapter(adapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            RSS.Channel.Item item = (RSS.Channel.Item) adapter.getItem(position);

            bitmapImage = getBitmapFromURL(item.cover_s_url);

            Intent intent = new Intent(getApplicationContext(), Choice.class);
            intent.putExtra("image", bitmapImage);
            startActivity(intent);
        }
    });

    editText.setOnKeyListener(new View.OnKeyListener() {
        public boolean onKey(View v, int KeyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
                button.callOnClick();
            }
            return false;
        }
    });

    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            keyword = editText.getText().toString().trim();
            if (keyword.equals("")) {
                Toast.makeText(MainActivity.this, "검색어를 입력하세요.", Toast.LENGTH_LONG).show();
                return;
            }

            pageno = 1;
            adapter.clear();
            searchBook();

            InputMethodManager inputmanager = (InputMethodManager) MainActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
            inputmanager.hideSoftInputFromInputMethod(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        }
    });

    listView.setOnScrollListener(new AbsListView.OnScrollListener() {

        boolean lastItemVisibleFlag;

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE && lastItemVisibleFlag) {
                if (pageno < totalPage) {
                    pageno++;
                    searchBook();
                }
            }
        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            lastItemVisibleFlag = (totalItemCount > 0) && (firstVisibleItem + visibleItemCount >= totalItemCount);
        }
    });
}

public void searchBook(){
    RequestParams params = new RequestParams();
    params.put("apikey", "9c1072977dc196251aa1b04a2087a5c9");
    params.put("q", keyword);
    params.put("result", 20);
    params.put("pageno", pageno);
    params.put("output", "json");

    client.get("http://apis.daum.net/search/book", params, response);
}

public static Spanned fromHTML(String source){
        return Html.fromHtml(source);
}
class BookAdapter extends BaseAdapter<RSS.Channel.Item>{
    public  BookAdapter(Activity activity, int resource){
        super(activity, resource);
    }
    View setListItem(View view, RSS.Channel.Item item){
        BookHolder holder = null;
        if(view == null){
            LayoutInflater inflater = getLayoutInflater();
            view = inflater.inflate(this.getResourceId(), null);

            holder = new BookHolder();
            holder.imageView = (ImageView) view.findViewById(R.id.imageView);
            holder.textView1 = (TextView) view.findViewById(R.id.textView1);
            holder.textView2 = (TextView) view.findViewById(R.id.textView2);
            holder.textView3 = (TextView) view.findViewById(R.id.textView3);
            holder.textView4 = (TextView) view.findViewById(R.id.textView4);
            holder.textView5 = (TextView) view.findViewById(R.id.textView5);

            view.setTag(holder);
        }else{
            holder = (BookHolder) view.getTag();
        }

        if(item != null){
            String title = item.title.replace("&lt;", "<").replace("&gt;", ">");
            String info = String.format(Locale.getDefault(), "%s / %s / %s", item.author, item.pub_nm, item.pub_date);
            String priceString = String.format(Locale.getDefault(), "<font color='gary'>%d</font> &gt; <font color='blue'><b>%d</b></font>;", item.list_price, item.sale_price);

            holder.textView1.setText(fromHTML(title));
            holder.textView2.setText(info);
            holder.textView3.setText(fromHTML(priceString));
            holder.textView4.setText(fromHTML(item.description));
            holder.textView5.setText(item.isbn13);

            Glide.with(MainActivity.this).load(item.cover_s_url).thumbnail(0.1f).into(holder.imageView);
        }
        return view;
    }
}

class BookResponse extends BaseResponse{
    public BookResponse(Context context){
        super(context);
    }

    public void onResponse(String jsonString){
        Gson gson = new Gson();
        RSS rss = gson.fromJson(jsonString, RSS.class);

        totalPage = ((rss.channel.totalCount-1)/20) + 1;

        if(totalPage > 3){
            totalPage = 3;
        }
        adapter.addAll(rss.channel.item);
    }

}
public Bitmap getBitmapFromURL(String src) {
    HttpURLConnection connection = null;
    try { URL url = new URL(src);
        connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true); connection.connect();
        InputStream input = connection.getInputStream();
        Bitmap myBitmap = BitmapFactory.decodeStream(input); return myBitmap; }
    catch (IOException e) { e.printStackTrace(); return null;
    }
    finally{
        if(connection!=null)connection.disconnect();
    }
}

}

RSS.class

public class Channel{

    public int result;
    public int totalCount;
    public List<Item> item;

    public class Item{
        public String title;
        public String author;
        public String pub_nm;
        public String description;
        public int sale_price;
        public int list_price;
        public String cover_s_url;
        public String pub_date;
        public String isbn13;
    }
}

}

다음 api로 책 정보, 사진 받아서 리스트뷰로 뿌려주는데 리스트뷰에서 사진을 포지션 받아서 intent로 넘겨서 다른 activity에서 사용하려하는데 사진을 url로 받아오니까 그걸 bitmap으로 바꾸고 포지션 받아서 보내는데 터지네요 포지션값 받아오는걸 잘못한것 같은데 어떻해 해야하나요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)