핸드폰에 설치된 앱목록 리시트를 외부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)-Static: isSBSettingEnabled falsed 이게 많이뜨던데 이거는 어떻게 해결해야하나요?
아 마지막으로 서비스에서DB입력하는방식을하려면 http방식이 좋나요 아니면 AsyncTask방식이 좋나요??
너무 질문이 많아서 .....죄송합니다. 고수분들 알려주시면 감사하겠습니다.!!!!!!!!!!!!!!!!!