2013. 6. 26. 09:56






Posted by hoonihoon
2013. 6. 25. 15:48
String mDrawableName = "myimg";
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName());


Posted by hoonihoon
2013. 6. 25. 15:48

There are no predefined Adapters which will render a HashMap. I suggest creating your own Adapter by extending BaseAdapter.

Edit: It is posible to use HashMap with and extended BaseAdapter, here's an(untested) example:

public class HashMapAdapter extends BaseAdapter {

    private HashMap<String, String> mData = new HashMap<String, String>();
    private String[] mKeys;
    public HashMapAdapter(HashMap<String, String> data){
        mData  = data;
        mKeys = mData.keySet().toArray(new String[data.size()]);
    }

    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public Object getItem(int position) {
        return mData.get(mKeys[position]);
    }

    @Override
    public long getItemId(int arg0) {
        return arg0;
    }

    @Override
    public View getView(int pos, View convertView, ViewGroup parent) {
        String key = mKeys[pos];
        String Value = getItem(pos).toString();

        //do your view stuff here

        return convertView;EDIT
    }
}

This comes with the following caveat, the order of the items is not guaranteed to be the same order you added them. Writing this example has made me realize; Don't use HashMap in an adapter :)

'Android > 개발팁' 카테고리의 다른 글

[Android] keyboard 감지  (0) 2013.07.08
How to replace R.drawable.“someString”  (0) 2013.06.25
Intent 로 gallery 의 특정 폴더 띄우기.  (1) 2013.05.31
Android log 작성법  (0) 2013.05.22
패키지 네이밍 !  (0) 2013.05.07
Posted by hoonihoon
2013. 6. 23. 21:48

https://developers.facebook.com/docs/howtos/androidsdk/3.0/login-with-facebook/


perfect code 


I'm trying Facebook Android SDK 3.0 tutorial but I'm facing a problem. When I clicked the login button and logged in using my facebook account, im expecting to see my button's text to change to logout as what the tutorial (http://developers.facebook.com/docs/howtos/androidsdk/3.0/login-with-facebook/) states but it did not happen. I added log to see if it passes by onActivityResult as suggested by thisquestion. Here's my log:

MainFragment   Unknown State: OPENING
MainFragment   onActivityResult
MainFragment   Logged out...

Please help. I don't know where did I get wrong and what to do next?

MainFragment.java

public class MainFragment extends Fragment{

    private static final String TAG = "MainFragment";
    private UiLifecycleHelper uiHelper;
    private Session.StatusCallback callback = new Session.StatusCallback() {
        @Override
        public void call(Session session, SessionState state, Exception exception) {
            onSessionStateChange(session, state, exception);
        }
    };

    private void onSessionStateChange(Session session, SessionState state, Exception exception) {
        if (state.isOpened()) {
            Log.i(TAG, "Logged in...");
        } else if (state.isClosed()) {
            Log.i(TAG, "Logged out...");     
        } else {
            Log.d(TAG, "Unknown state: " + state);
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        uiHelper = new UiLifecycleHelper(getActivity(), callback);
        uiHelper.onCreate(savedInstanceState);
    }

    @Override
    public void onResume() {
        super.onResume();

        // For scenarios where the main activity is launched and user
        // session is not null, the session state change notification
        // may not be triggered. Trigger it if it's open/closed.
        Session session = Session.getActiveSession();
        if (session != null && (session.isOpened() || session.isClosed()) ) {
            onSessionStateChange(session, session.getState(), null);
        }

        uiHelper.onResume();
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        uiHelper.onActivityResult(requestCode, resultCode, data);
        Log.d(TAG, "onActivityResult");
    }

    @Override
    public void onPause() {
        super.onPause();
        uiHelper.onPause();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        uiHelper.onDestroy();
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        uiHelper.onSaveInstanceState(outState);
    }   

    @Override
    public View onCreateView(LayoutInflater inflater,
            ViewGroup container, 
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.main, container, false);      

        LoginButton authButton = (LoginButton) view.findViewById(R.id.authButton);
        authButton.setFragment(this);    

        return view;
    }
}

MainActivity.java

public class MainActivity extends FragmentActivity {

    private MainFragment mainFragment;
    private static final String TAG = "MainActivity";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (savedInstanceState == null) {
            // Add the fragment on initial activity setup
            mainFragment = new MainFragment();
            getSupportFragmentManager()
            .beginTransaction()
            .add(android.R.id.content, mainFragment)
            .commit();
        } else {
            // Or set the fragment from restored state info
            mainFragment = (MainFragment) getSupportFragmentManager()
            .findFragmentById(android.R.id.content);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.facebook.widget.LoginButton
        android:id="@+id/authButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="30dp"
    />

</LinearLayout>


'2019년 이전 정리 > Facebook API' 카테고리의 다른 글

페이스북 설정 방법 keystore  (0) 2013.07.25
Posted by hoonihoon
2013. 6. 14. 11:21

Resources res = getResources();
String[] arrString = res.getStringArray(R.array.myarrdata);
 List<String> mArrayList = new ArrayList<String>();

  for(String s:arrString){
   mArrayList.add(s);
 }

Posted by hoonihoon
2013. 5. 31. 17:09


Uri targetUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 

 String targetDir = Environment.getExternalStorageDirectory().toString() + "/saturday9"; 


targetUri = targetUri.buildUpon().appendQueryParameter("bucketId",String.valueOf(targetDir.toLowerCase().hashCode())).build();


 Log.d("kth","targetUri : "+targetUri);

 Intent intent = new Intent(Intent.ACTION_VIEW, targetUri);

 startActivity(intent);



결과:

05-31 17:07:04.843: D/kth(14184): targetUri : content://media/external/images/media?bucketId=1443034118





Posted by hoonihoon
2013. 5. 22. 11:48

로그는 ERROR, WARN, INFO, VERBOSE의 다섯 개 레벨로 나눌 수 있다.
VERBOSE로 설정된 로그(Log.v)는 개발용 컴파일이 아닌 배포용 패키지를 만들 때 컴파일 단계에서 빠져버린다.

디버그 레벨 로그는 컴파일은 되지만 런타임 시에 빠지므로 절대 런타임시에 출력될 일은 없다.
나머지 에러나 WARNING, INFO 레벨 로그는 개발시나 런타임시나 출력이 된다

아주 중요한 정보만 ERROR, WARN, INFO레벨 로그로 남기고, 
가능한 개발시에는 VERBOSE 레벨을 사용하면 런타임 시 부하를 줄일 수 있다.



- 로그 남기기
안드로이드에서 로그를 남기기 위해서는 android.util.Log 클래스를 사용하면 된다.

[로그 레벨]
Error : 가장 심각한 문제가 발생했을때 남기는 로그 
ex) Log.e("tag", "error message");

Warning : 심각하지는 않지만 나중에라도 꼭 살펴보아야 할 문제가 발생 했을때 남기는 로그 
ex) Log.w("tag","warning message");

Information : 어떤 처리를 하면서 발생하는 진행 과정 등을 모니터링하기 위한 목적으로 남기는 로그
ex) Log.i("tag", "information message");

Debugging : 디버깅의 목적으로 문제 발생 가능성이 있는 곳에 남기는 로그
ex) Log.d("tag", "debugging message");

Verbose : 동작 여부를 최대한 자세히 살펴볼 목적으로 남기는 로그
ex) Log.v("tag", "verbose message"); 

import android.app.*;

import android.os.*;

import android.util.*;


public class LogDemoEx1Activity extends Activity {

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        Log.e("tag", "error message");

        Log.w("tag", "warning message");

        Log.i("tag", "information message");

        Log.d("tag", "debugging message");

        Log.v("tag", "verbose message");

    }

}


결과

 

tag 이름을 이용하여 tag 필터링 기능을 사용하면 원하는 로그만 볼 수 있다.

[출처] Android Log 알고 쓰자..|작성자 ezmo01


출저 : http://blog.naver.com/PostView.nhn?blogId=ezmo01&logNo=110126998037



Posted by hoonihoon
2013. 5. 21. 16:31


eclipse에서 jar로 제공되는 외부 라이브러리의 소스가 궁금할때가 있다.


이때, 소스상에서 jar 파일 내의 .class 파일을 열게 되면



제대로 읽을 수 없도록 되어 있다. 뭐.. Attach Source 어쩌구 저쩌구..


이럴때 아래와 같은 방법을 사용하면 간단하게 볼 수 있다.



1. 첨부된 2개의 파일을 다운받는다.


2. jadnt158.zip을 압축을 푼다.


3. 기억할 수 있는 경로에 압축을 푼다.


4. net.sf.jadclipse_3.3.0.jar 파일을 본인이 사용하는 eclipse 폴더내의 plugins 폴더에 넣는다.


5. 이클립스를 재시작한다.


6. windows - preferences 에 가보면 java 항목에 JadClipse 라는 항목이 생겨 있다.


7. 맨 위의 Path to decompiler에 3번에서 압축을 푼 경로를 입력하고 jad.exe를 뒤에 붙인다.

ex) C:\jadnt158 에 압축을 풀었다면 C:\jadnt158\jad.exe 를 입력한다.





8. windows - preferences - General - Editors - File Associations 에서

*.class 에 해당하는 editor가 JadClipse Class File Viewer (default) 로 설정되어 있는지 확인한다.





net.sf.jadclipse_3.3.0.jar


jad.exe


자 이제 jar 파일 내의 .class 파일을 더블클릭해서 열어보면...


알아서 디컴파일해서 소스 형태로 보여줘서 잙 읽을수 있게 된다.ㅋㅋ

Posted by hoonihoon