2014-02-23 143 views
-2

我无法从Android向Java桌面服务器获取价值。我只得到一个输出。我已经使循环运行了5次。它运行一次并在android上输出一次,然后崩溃。它应该给android 5次输出。在每个输出之后,它应该将价值传递给java桌面服务器。错误:空指针异常

我在做什么和我想要的是什么:我正在获得信号强度。我想要5个样本。所以我运行代码5次。只要我一次获得值,我就可以将它传递给Java Desktop Server代码。我已经写在java中作为server.java,它运行得很好。

客户端代码:

public class MainActivity extends Activity { 
     protected static final long TIME_DELAY = 1000; 
     TextView mTextView; 
     private WifiManager wifiManager; 
     Handler handler=new Handler(); 
     int count =0; String data =""; 

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

      //Log.d(TAG, "onClickRefresh"); 
     } 


     BroadcastReceiver scanReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
      // Log.d(TAG, "scanReceiver received!"); 
       // Refreshes the chart once we have scan results 

       // Request a scan again 

       if(count<5){ 
       final StringBuilder sb = new StringBuilder(); 

       List<ScanResult> wifiScanList = wifiManager.getScanResults(); 
       for (ScanResult result : wifiScanList) { 
         if (result.SSID.equals("Khosla ka Ghosla")) { 
          sb.append(""+result.level); 
         } 
         if (result.SSID.equals("panny")) { 
          sb.append(""+result.level); 
         } 
         if (result.SSID.equals("ferbora")) { 
          sb.append(""+result.level); 
         } 

        //  mTextView.setText("getting called " +count + sb);     
         messsage=sb.toString(); 
         mTextView.setText(messsage); 

        } count++; 
        new Asynctask1().execute(messsage); 
       wifiManager.startScan(); 
       } 
      } 
     }; 

      public class Asynctask1 extends AsyncTask<String, Void, Void> { 
       private PrintWriter printwriter; 
      private static final String IP_ADDRESS = "192.168.0.8"; 
      private static final int DEST_PORT = 4444; 
      private EditText mTextField; 
      protected Void doInBackground(String... messages) { 
       String message = messages[0]; 
       Socket client = null; 
       try { 
        client = new Socket(IP_ADDRESS, DEST_PORT); // connect to server 
       } catch (UnknownHostException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
       // Write to server. 
       try { 
        printwriter = new PrintWriter(client.getOutputStream(), true); 
        printwriter.write(messsage); // write the message to output stream 
        printwriter.flush(); 
        printwriter.close(); 
       } 
       catch (IOException e) { 
        e.printStackTrace(); 
       } finally { 
        try { 
         client.close(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 
       return null; 
      } 
     } 
}  

我得到的错误是空指针异常。我不知道为什么它是空的。它给出了错误:finally {try {client.close();.

除此之外,日志猫不会显示太多东西。你能指导我吗?

+0

@NiksTyagi是的,我可以连接服务器。如果我只写Asynctask,那么我可以打印到服务器。但是,当我运行代码5次并且保持循环时不行。所以服务器很好。不知道,为什么这个错误即将到来。 –

回答

0

您在doInBackground方法中返回null。

+0

我在移除广播接收器时运行了此代码。所以,我不确定。 –

+0

但如果该方法是无效的,为什么你返回一个空值 – Premier

+0

如果我不加null它告诉我添加一个返回类型..它是Void(V帽) –