2014-02-24 20 views
0

在Mainactivity.java中,我將wifi的信號強度從5次加入到服務中。我通過意圖傳遞陣列列表。我通過Intent在另一個文件中獲得了該值。現在,我想將這個值傳遞給java桌面服務器。我在Intent中的onStart中調用asynctask方法。我沒有得到任何錯誤。但沒有顯示任何價值。傳遞來自Android應用程序的值並在控制檯上顯示

當我做log cat的時候,這個值正在顯示。

請你告訴我,我錯了

主要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); 
       } 
      } 
     }; 

JavaServiceClass.java

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設備和桌面系統在相互可路由的網絡上(通常意味着相同的wifi)?您確定桌面上沒有防火牆,並且服務器實際上正在運行偵聽。將一些日誌記錄添加到您的代碼中,以指示(未)成功打開與桌面的連接。還要添加日誌記錄以表明該消息實際上是非空的(並且在它爲空的情況下不要嘗試輸出System.out.println(消息)) –

+0

@ChrisStratton,我禁用了防火牆。如果我只用一個texbox和一個按鈕執行Asynctask,當我點擊一個按鈕時,文本框中的文本顯示在javadesktop服務器中。 – user3345483

+0

然後,您需要輸入一些日誌記錄來查找工作與非工作情況之間的差異。 –

回答

1

我想你應該你的價值迴歸onPostExecute()方法的AsyncTask類,然後嘗試打印您的值,有些事情是這樣的:

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

只是返回您的消息並在此處打印

相關問題