2014-02-24 3 views
0

Mainactivity.java에서 wifi에서 신호 강도를 5 번 받아 서비스에 추가하고 있습니다. 나는 의도를 통해 arraylist를 전달합니다. 나는 다른 파일에서 인 텐트를 통해 값을 얻는다. 자,이 값을 Java 데스크탑 서버에 전달하고 싶습니다. Intent의 onStart에서 asynctask 메서드를 호출합니다. 나는 어떤 오류도 내지 않는다. 그러나 가치는 표시되지 않습니다.Android 애플리케이션의 값 전달 및 콘솔에 표시

로그 cat을 수행하면 값이 표시됩니다.

당신은 내가

나는 당신이 (onPostExecute에 값을 반환해야한다고 생각
public class javaServiceClass extends Service { 

    public void onStart(Intent intent, int startId) { 

        ArrayList<String> stock_list = (ArrayList<String>) intent.getExtras().get("stock_list"); 

        System.out.println(stock_list.get(1)); 
        messsage = stock_list.get(0); 
       new Asynctask1().execute(messsage); 
} 
    public class Asynctask1 extends AsyncTask<String, Void, Void> { 
         private PrintWriter printwriter;  
        protected Void doInBackground(String... messages) { 
         final String IP_ADDRESS = "134.190.162.165"; 
         final int DEST_PORT = 4444; 

         if(messsage !=null){ 

         //Socket client = null; 
         try { 
          Socket client = new Socket(IP_ADDRESS, DEST_PORT); // connect to server 

          printwriter = new PrintWriter(client.getOutputStream(), true); 
          printwriter.write(messsage); // write the message to output stream 

          printwriter.flush(); 
          printwriter.close(); 
          client.close(); 
         } catch (UnknownHostException e) { 
          e.printStackTrace(); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 
     else 
         { System.out.println(messsage);} 
         return null; 
+0

Android 기기와 데스크톱 시스템이 상호 라우팅이 가능한 네트워크 (일반적으로 동일한 Wi-Fi를 의미 함)에 있다는 사실을 알고 계십니까? 바탕 화면에 방화벽이없고 실제로 서버가 수신 대기하고 있는지 확인하십시오. 코드에 로깅을 추가하여 데스크톱 연결이 성공적으로 시작되었음을 나타냅니다. 또한 메시지가 실제로 null이 아님을 나타내는 로깅을 추가합니다 (null 인 경우 System.out.println (message)를 시도하지 마십시오). –

+0

@ChrisStratton, 방화벽을 비활성화했습니다. TXexbox와 버튼으로 Asynctask 만 실행하면 버튼을 클릭하면 텍스트 상자의 텍스트가 javadesktop 서버에 표시됩니다. – user3345483

+0

그런 다음 작동 중과 작동하지 않는 경우의 차이점을 추적하기 위해 일부 로깅을 입력해야합니다. –

답변

1

) 방법 JavaServiceClass.java 잘못된

홈페이지 Activity.Java

public class MainActivity extends Activity { 
        TextView mTextView; 
     private WifiManager wifiManager; 
       int count =0; String data =""; 
     ArrayList<String> arr = new ArrayList<String>();   
     private String messsage;  
     private static final IntentFilter FILTER = new IntentFilter(
       WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      mTextView = (TextView) findViewById(R.id.text_id);   
      wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); 
      registerReceiver(scanReceiver, FILTER);  
      wifiManager.startScan(); 
     } 


     @Override 
     public void onStart() { 
      super.onStart();    
      // Register the scan receiver 
      registerReceiver(scanReceiver, FILTER); 
     }  
     @Override 
     public void onStop() { 
      super.onStop(); 
      // Unregister the receiver 
      unregisterReceiver(scanReceiver); 
     }  
     public void onClickRefresh(View v) { 
      count=0; 
      wifiManager.startScan(); 
        }     
     BroadcastReceiver scanReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       if(count<5){ 
       final StringBuilder sb = new StringBuilder(); 

       List<ScanResult> wifiScanList = wifiManager.getScanResults(); 
       for (ScanResult result : wifiScanList) { 
         if (result.SSID.equals("Dal")) { 
          sb.append(""+result.level); 
         }     
        } 
       mTextView.setText("caled" +count + sb + " length is" + sb.length()); 
       arr.add(sb.toString()); 
       count++; 
       wifiManager.startScan(); 
       } 
       else if (count==5) 
       { 
        Intent i= new Intent(context, javaServiceClass.class); 
        i.putExtra("stock_list", arr); 
        context.startService(i); 
       } 
      } 
     }; 

어딘지 말해 주시겠습니까 AsyncTask 클래스의 다음 값을 인쇄 해보십시오.

@Override 
protected void onPostExecute(String messsage) {  
System.out.println(messsage); 
} 

메시지를 반환하고 인쇄하십시오.