3.0 부터 메인 쓰레드에서 네트워크 사용을 하면 안된다는 거 같습니다.
그래서 AsyncTask를 사용하도록 바꾸어서 잘동작합니다..
ps. 실시간으로 업데이트 하는거 추가
package com.example.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.Toast;
public class State extends Activity {
ListView listView;
Spinner spinner;
ArrayList<String> list;
static ArrayAdapter<String> adapter;
ArrayAdapter<String> adapter2;
boolean is = true;
String Query;
int count=0;
// MyApp appState;
private AsyncTask<String, String, String> mTask;
@Override
protected void onCreate(Bundle savedInstanceState) {
// appState.setState(true);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
list = new ArrayList<String>();
adapter2 = new ArrayAdapter<String> ( this , android.R.layout.simple_spinner_item);
adapter2.setDropDownViewResource (android.R.layout.simple_spinner_dropdown_item);
Spinner spinner = (Spinner)this.findViewById (R.id.spinner);
spinner.setAdapter (adapter2);
spinner.setOnItemSelectedListener(spnCountriesListener);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
listView = (ListView)findViewById(R.id.list);
listView.setAdapter(adapter);
listView.setTextFilterEnabled(true);
Query = String.format("select * from v_state ORDER BY username,blnum ASC");
//spinner.setSelection(0);
setTitle((CharSequence)"엘리베이터 모니터링");
listView.setOnItemClickListener(
new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id)
{
Object o = listView.getItemAtPosition(position);
String pen = o.toString();
Toast.makeText(getApplicationContext(), "" + pen, Toast.LENGTH_LONG).show();
}
}
);
handler2.sendEmptyMessage(1);
//handler.sendEmptyMessage(1);
}
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
// super.onBackPressed(); //지워야 실행됨
Builder d = new AlertDialog.Builder(this);
d.setMessage("정말 종료하시겠습니까?");
d.setPositiveButton("예", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// appState.setState(
((APP)getApplicationContext()).setData("false");
mTask.cancel(true);
finish();
}
});
d.setNegativeButton("아니요", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
d.show();
}
private Spinner.OnItemSelectedListener spnCountriesListener =
new Spinner.OnItemSelectedListener() {
public void onItemSelected(AdapterView parent, View v, int position, long id) {
Log.d("jungjury",String.format("%d", count));
Log.d("jungjury", parent.getSelectedItem().toString());
if ( count != 0 ){
if (is== false )
{
Log.d("jungjury","CLEAR");
int j=0;
for( j=0; j<count ; j++)
list.set(j, " ");
}
}
Query="select * from v_state where username='"+parent.getSelectedItem().toString()+"' ORDER BY blnum ASC";
if ( parent.getSelectedItem().toString() =="전체보기" ) Query = String.format("select * from v_state ORDER BY username,blnum ASC");
Log.d("jugjury", Query );
handler.sendEmptyMessage(1);
}
public void onNothingSelected(AdapterView parent) {
Query = String.format("select * from v_state ORDER BY username,blnum ASC");
handler.sendEmptyMessage(1);
}
};
Handler handler = new Handler(){
public void handleMessage(Message msg){
super.handleMessage(msg);
if (Build.VERSION.SDK_INT >= 11) {
mTask = new MyAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR );
} else {
mTask = new MyAsyncTask().execute();
}
}
};
Handler handler2 = new Handler(){
public void handleMessage(Message msg){
super.handleMessage(msg);
if (Build.VERSION.SDK_INT >= 11) {
new MyAsyncTask2().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR );
} else {
new MyAsyncTask2().execute();
}
// this.sendEmptyMessageDelayed(0, 1000);
}
};
Handler handler5 = new Handler() {
@Override
public void handleMessage(Message msg) {
runOnUiThread(new Runnable() {
public void run() {
adapter.notifyDataSetChanged();
}
});
// MainActivity.this.listView.setSelectionFromTop(0,0);
}
};
Handler handler6 = new Handler() {
@Override
public void handleMessage(Message msg) {
runOnUiThread(new Runnable() {
public void run() {
adapter2.notifyDataSetChanged();
}
});
// MainActivity.this.listView.setSelectionFromTop(0,0);
}
};
ResultSet reset;
public void query2( String query )
{
Connection conn = null;
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
conn = DriverManager.getConnection("jdbc:jtds:sqlserver://218.234.17.183/elevator_state","sa","!@#$?><M");
Statement stmt = conn.createStatement();
reset = stmt.executeQuery(Query);
int i=0;
while(reset.next()){
final String str = reset.getString(12)+" "+reset.getString(1)+" "+reset.getString(4)+" "+reset.getString(5)+" "+reset.getString(6)+" "
+reset.getString(2)+" "+reset.getString(3);
if ( is )
{
runOnUiThread(new Runnable() {
public void run() {
adapter.add(str);
count++;
}
});
}
else
{
list.set(i, str);
i++;
}
}
if ( is == false ){
int j=0;
for( j=i; j<count ; j++)
list.set(j, " ");
}
is=false;
conn.close();
}
catch (Exception e)
{
//Log.w("111Error connection","" + e.getMessage());
}
}
public class MyAsyncTask extends AsyncTask<String, String, String>{
// @Override
protected void onPreExecute() {
}
// @Override
protected String doInBackground(String... params) {
String str = ((APP)getApplicationContext()).getData();
String TRUE="true";
if (isCancelled()) return (null); // don't forget to terminate this method
//Log.d("hohoho", str );
query2(Query);
return null;
}
//@Override
protected void onPostExecute(String result) {
handler5.sendEmptyMessage(0);
handler.sendEmptyMessageDelayed(0, 500);
}
//@Override
protected void onCancelled() {
super.onCancelled();
}
}
public class MyAsyncTask2 extends AsyncTask<String, String, String>{
Connection conn = null;
// @Override
protected void onPreExecute() {
}
// @Override
protected String doInBackground(String... params) {
if(this.isCancelled()) {
this.cancel(true);
// appState.setState(false);
}
//if ( appState.getState())
{
try {
// Log.d("Log", "#####################");
Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
// Log.i("Connection","**MSSQL driver load");
conn = DriverManager.getConnection("jdbc:jtds:sqlserver://주소/DB명","아이디","패스워드");
// Log.i("Connection","**MSSQL open");
Statement stmt = conn.createStatement();
ResultSet reset = stmt.executeQuery("select distinct username from elevator");
runOnUiThread(new Runnable() {
public void run() {
adapter2.add("전체보기");
}
});
while(reset.next()){
if ( reset.getString(1) != null )
{
final String str = reset.getString(1);
runOnUiThread(new Runnable() {
public void run() {
adapter2.add(str);
}
});
}
}
conn.close();
}
catch (Exception e)
{
Log.w("222Error connection","" + e.getMessage());
}
}
return null;
}
//@Override
protected void onPostExecute(String result) {
// handler6.sendEmptyMessage(0);
}
//@Override
protected void onCancelled() {
super.onCancelled();
}
}
}