마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

외부DB입력 방식에 대해 질문드립니다.

0 추천

핸드폰에 설치된 앱목록 리시트를 외부DB에 입력하는 기능을 작성하고있습니다.(서비스로)

private void applist(String title, String packname) {

    SharedPreferences sf = getSharedPreferences(sfme, 0);
    String phnum = sf.getString("phonenumber", "");

    Log.d(TAG, "Phone Number: " + phnum);

    OkHttpClient client = new OkHttpClient();
    RequestBody body = new FormBody.Builder()
            .add("phonenumber", phnum)
            .add("title",title)
            .add("packname",packname)
            .build();

    //request
    Request request = new Request.Builder()
            .url("http://서버IP/insert/insertapplist.php")
            .post(body)
            .build();

    try {
        client.newCall(request).execute();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

 

이메소드를 이용해서

public void run(){
    final PackageManager pkgm = getPackageManager();
    Intent intentapp = new Intent(Intent.ACTION_MAIN, null);
    intentapp.addCategory(Intent.CATEGORY_LAUNCHER);
    final List<ResolveInfo> AppInfos = pkgm.queryIntentActivities(intentapp, 0);

    try{
        for(ResolveInfo info : AppInfos){
            ActivityInfo ai = info.activityInfo;
            final String title = ai.loadLabel(pkgm).toString();
            final String packname = ai.packageName;
            Log.i("APP TITLE", ai.loadLabel(pkgm).toString());
            Log.i("APP Package Name", ai.packageName);

            applist(title,packname);
        }
        stopSelf();

    }catch (Exception ex){
        Log.i(TAG, " Exception Exception");
    }
}

 

이렇게하여 입력을 하고있습니다.

지금 저의 방식은 어플의 이름과 패키지네임을 한번구할떄마다  applist()메소드 실행하여 입력하고 또 하고 이렇게하여 어플 목록의 갯수만큼 Okhttp연결을 합니다. 

질문은요.

1. 혹시 어플의 목록을 다 구해서 배열에 저장한다음 이배열을 applist()메소드로 한번 연결해서 한번에 DB에 입력하게하려면 어떻게 해야하는지? 그리고 이런방법이 맞는것인지.. 궁금합니다.

2. 그리고 저의 저Okhttp메소드를 하면 

 --> A connection to http://서버IP/ was leaked. Did you forget to close a response body?

이런메시지가 뜨더군요.. 구글링하니깐 body를 close하라던데 이거를 어디에쓸지를 모르겟어요 메소드 안에 다써봣지만 써지지도않아요... 아니면 무시해도 되는건가요??

 

3. DB입력방식을 서비스에서 http방식말고? AsyncTask방식을 이용해서 해봤는데..

이번에는 (HTTPLog)-StaticisSBSettingEnabled falsed 이게 많이뜨던데 이거는 어떻게 해결해야하나요?

아 마지막으로 서비스에서DB입력하는방식을하려면 http방식이 좋나요 아니면 AsyncTask방식이 좋나요??

 

너무 질문이 많아서 .....죄송합니다. 고수분들 알려주시면 감사하겠습니다.!!!!!!!!!!!!!!!!!

 

 

 

 

어렵네안드로이드 (590 포인트) 님이 2017년 3월 1일 질문

1개의 답변

0 추천
 
채택된 답변
저라면 앱 목록을 json형태로 만들고, retrofit을 이용해서 서버로 보낼 것 같아요.
쎄미 (162,410 포인트) 님이 2017년 3월 2일 답변
어렵네안드로이드님이 2017년 3월 7일 채택됨
retrofit이요??? 처음 들어보네용..;;; 한번 알아봐야겠어요!! 감사합니다.
혹시 이거에대한 정보에 대해 조금이라도 알려주실수있을까요?
retrofit 이라고만 구글링해도 많이 나옵니다.
...