package org.czzz.demo; import java.util.ArrayList; import java.util.List; import org.czzz.demo.zxing.CaptureActivity; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; /** * * * @author tinyao * */ public class DoubanActivity extends Activity{ private EditText isbnEdt; private EditText uidEdt; private TextView bookInfoTv; private ImageView bookCover; private DoubanBook book; private ProgressDialog pd; private DoubanOAuth dbOAuth; private DoubanUser user; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.douban); isbnEdt = (EditText)findViewById(R.id.edt_book_isbn); uidEdt = (EditText)findViewById(R.id.edt_user_id); bookInfoTv = (TextView)findViewById(R.id.book_info); bookCover = (ImageView)findViewById(R.id.book_cover); dbOAuth = new DoubanOAuth(this); user = new DoubanUser(); Button fetchInfoBtn = (Button)findViewById(R.id.btn_fetch_book); Button dbOAuthBtn = (Button)findViewById(R.id.btn_douban_oauth); Button dbUserBtn = (Button)findViewById(R.id.btn_douban_user); Button bookColBtn = (Button)findViewById(R.id.btn_book_collect); Button bookComBtn = (Button)findViewById(R.id.btn_book_comm); Button contactBtn = (Button)findViewById(R.id.btn_user_contact); Button scanQRBtn = (Button)findViewById(R.id.btn_scan_qrcode); Button searchBtn = (Button)findViewById(R.id.btn_key_search); dbOAuthBtn.setOnClickListener(btnlistener); dbUserBtn.setOnClickListener(btnlistener); contactBtn.setOnClickListener(btnlistener); bookColBtn.setOnClickListener(btnlistener); bookComBtn.setOnClickListener(btnlistener); fetchInfoBtn.setOnClickListener(btnlistener); scanQRBtn.setOnClickListener(btnlistener); searchBtn.setOnClickListener(btnlistener); } public View.OnClickListener btnlistener = new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if(!NetUtils.isNetworkOk(DoubanActivity.this)) return; switch(v.getId()){ case R.id.btn_douban_oauth: dbOAuth.lauchforVerifyCode(DoubanActivity.this); break; case R.id.btn_douban_user: fetchUserInfo(uidEdt.getText().toString()); break; case R.id.btn_user_contact: fetchUserContacts(uidEdt.getText().toString()); break; case R.id.btn_fetch_book: fetchBookInfo(isbnEdt.getText().toString()); break; case R.id.btn_book_comm: fetchBookComments(isbnEdt.getText().toString()); break; case R.id.btn_book_collect: fetchBookCollection(uidEdt.getText().toString()); break; case R.id.btn_scan_qrcode: Intent i = new Intent(DoubanActivity.this, CaptureActivity.class); startActivityForResult(i,0); break; case R.id.btn_key_search: EditText edt = (EditText)findViewById(R.id.edt_book_key); searchBooks(edt.getText().toString()); break; } } }; /** * 根据isbn从豆瓣获取书籍文字信息 * @param isbn */ protected void fetchBookInfo(String isbn) { // TODO Auto-generated method stub pd = new ProgressDialog(this); pd.setMessage("正在从豆瓣获取图书信息..."); pd.show(); HttpTaskListener bookInfoListener = new HttpTaskListener(HttpListener.FETCH_BOOK_INFO); DoubanBookUtils.fetchBookInfo(isbn, bookInfoListener); } /** * 根据url从豆瓣获取书籍封面 * @param url */ protected void fetchBookCover(String url) { // TODO Auto-generated method stub HttpTaskListener bookCoverListener = new HttpTaskListener(HttpListener.FETCH_BOOK_COVER); DoubanBookUtils.fetchBookCover(url, bookCoverListener); } /** * 根据userId获取豆瓣用户信息 * @param userid */ protected void fetchUserInfo(String userid){ pd = new ProgressDialog(this); pd.setMessage("正在获取用户信息..."); pd.show(); HttpTaskListener userInfoListener = new HttpTaskListener(HttpListener.FETCH_USER_INFO); if(dbOAuth.getAccessToken().equals("")) DoubanUser.fetchUserInfo(userid, userInfoListener); else DoubanUser.fetchUserInfo(userid, userInfoListener, dbOAuth.getAccessToken()); } /** * 根据userId获取书籍收藏 * @param userid */ protected void fetchBookCollection(String userid){ pd = new ProgressDialog(this); pd.setMessage("正在获取用户藏书..."); pd.show(); HttpTaskListener listener = new HttpTaskListener(HttpListener.FETCH_BOOK_COLLECTION); DoubanBookUtils.fetchBookCollection(listener, listener.type, userid); } /** * 根据isbn获取书籍评论 * @param isbn */ protected void fetchBookComments(String isbn) { // TODO Auto-generated method stub pd = new ProgressDialog(this); pd.setMessage("正在从豆瓣获取书籍评论..."); pd.show(); HttpTaskListener listener = new HttpTaskListener(HttpListener.FETCH_BOOK_COMMENTS); DoubanBookUtils.fetchBookComments(listener, listener.type, isbn); } /** * fetch catacts of the user * @param uid */ protected void fetchUserContacts(String uid){ pd = new ProgressDialog(this); pd.setMessage("正在获取用户关注列表..."); pd.show(); HttpTaskListener listener = new HttpTaskListener(HttpListener.FETCH_USER_CONTACTS); DoubanUser.fetchUserContacts(uid, listener, listener.type); } protected void searchBooks(String keyword){ pd = new ProgressDialog(this); pd.setMessage("正在从豆瓣搜索相关图书..."); pd.show(); HttpTaskListener booksearchListener = new HttpTaskListener(HttpListener.SEARCH_BOOKS); DoubanBookUtils.searchBooks(keyword, booksearchListener); } /** * 豆瓣认证完成后,获取返回的code * @param intent */ @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); Log.d("DEBUG", "onNewIntent---"); //在这里处理获取返回的code参数 Uri uri = intent.getData(); String code = uri.getQueryParameter("code"); bookInfoTv.append("code: " + code + "\n"); HttpTaskListener taskListener = new HttpTaskListener(HttpListener.DOUBAN_OAUTH_JSON); dbOAuth.fetchAccessToken(code, taskListener); } /** * Http请求监听器,用于处理HttpAsyncTask中的响应事件 * @author tinyao * */ private class HttpTaskListener implements HttpListener{ int type; public HttpTaskListener(int type1){ this.type = type1; } @SuppressWarnings("unchecked") @Override public void onTaskCompleted(Object data) { // TODO Auto-generated method stub switch(type){ case HttpListener.DOUBAN_OAUTH_JSON: // 获取到access token等json // 解析json,获取accessToken dbOAuth.parseJson4OAuth(String.valueOf(data)); bookInfoTv.append("token: " + dbOAuth.getAccessToken() + "\nuser_id: " + dbOAuth.getDoubanUserId()); break; case HttpListener.FETCH_BOOK_INFO: // 获取到书籍信息 if(pd != null) pd.dismiss(); if(data == null){ Toast.makeText(DoubanActivity.this, "book not found", Toast.LENGTH_SHORT).show(); break; } book = DoubanBookUtils.parseBookInfo(String.valueOf(data)); bookInfoTv.setText("book:\n" + book); fetchBookCover(book.image); break; case HttpListener.FETCH_BOOK_COVER: // 获取到书籍封面 bookCover.setImageBitmap((Bitmap)data); break; case HttpListener.FETCH_USER_INFO: // 获取用户信息 if(pd != null) pd.dismiss(); user = new DoubanUser(); // 解析成功 boolean if(user.parse4User(String.valueOf(data))) bookInfoTv.setText("user:\n" + user); else Toast.makeText(DoubanActivity.this, "error: user not found!", Toast.LENGTH_SHORT).show(); break; case HttpListener.FETCH_BOOK_COLLECTION: //获取用户书籍收藏, 用户属性之一 if(pd != null) pd.dismiss(); StringBuilder collectionsBuilder = new StringBuilder(); if(data == null){ Toast.makeText(DoubanActivity.this, "error: user not found !", Toast.LENGTH_SHORT).show(); break; } for(BookCollectionEntry entry : (List<BookCollectionEntry>)data){ collectionsBuilder.append(entry + "\n\n"); } bookInfoTv.setText("book-collections:\n" + collectionsBuilder.toString()); break; case HttpListener.FETCH_BOOK_COMMENTS: //获取书籍评论 if(pd != null) pd.dismiss(); StringBuilder commentsBuilder = new StringBuilder(); if(data == null){ Toast.makeText(DoubanActivity.this, "error: book not found !", Toast.LENGTH_SHORT).show(); break; } for(BookCommentEntry entry : (List<BookCommentEntry>)data){ commentsBuilder.append(entry + "\n\n"); } bookInfoTv.setText("book-comments:\n" + commentsBuilder.toString()); break; case HttpListener.FETCH_USER_CONTACTS: if(pd != null) pd.dismiss(); StringBuilder contactsBuilder = new StringBuilder(); if(data == null){ Toast.makeText(DoubanActivity.this, "error: user not found !", Toast.LENGTH_SHORT).show(); break; } for(DoubanUser us : (List<DoubanUser>)data){ contactsBuilder.append(us + "\n\n"); } bookInfoTv.setText("contacts:\n" + contactsBuilder.toString()); break; case HttpListener.SEARCH_BOOKS: if(data == null){ Toast.makeText(DoubanActivity.this, "book not found", Toast.LENGTH_SHORT).show(); break; } bookInfoTv.setText("search books: "); try { JSONObject json = new JSONObject(String.valueOf(data)); bookInfoTv.append("count: " + json.getString("count") + "\t\t total: " + json.getString("total")); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } ArrayList<DoubanBook> list = DoubanBookUtils.parseSearchBooks(String.valueOf(data)); if(pd != null) pd.dismiss(); for(DoubanBook book : list){ bookInfoTv.append("\n\n==========================\n" + book); } // bookInfoTv.setText("book:\n" + data); break; } } @Override public void onTaskFailed(String data) { // TODO Auto-generated method stub Toast.makeText(DoubanActivity.this, "error: " + data, Toast.LENGTH_SHORT).show(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub if(resultCode == RESULT_OK){ String codeFormat = data.getStringExtra("bracode_format"); String codeText = data.getStringExtra("bracode_text"); if(codeFormat.contains("EAN")){ isbnEdt.setText(codeText); fetchBookInfo(codeText); }else{ Toast.makeText(this, "not isbn for book", Toast.LENGTH_SHORT).show(); } } super.onActivityResult(requestCode, resultCode, data); } }