달력

3

« 2024/3 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
728x90
반응형

2013.4.23....새로 코드 작성해서 올릴 예정




예전에 작성했던 것이 안드로이드 3.0 이하에서만 동작해서 구글링해서 원인을 찾았습니다. 

3.0 부터 메인 쓰레드에서 네트워크 사용을 하면 안된다는 거 같습니다.

그래서 AsyncTask를 사용하도록 바꾸어서 잘동작합니다..


안드로이드 4.1.2에서만 테스트해봤습니다. 


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();

         }



     }

    

    

}

728x90
반응형
:
Posted by mapagilove