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;
您是否知道Android設備和桌面系統在相互可路由的網絡上(通常意味着相同的wifi)?您確定桌面上沒有防火牆,並且服務器實際上正在運行偵聽。將一些日誌記錄添加到您的代碼中,以指示(未)成功打開與桌面的連接。還要添加日誌記錄以表明該消息實際上是非空的(並且在它爲空的情況下不要嘗試輸出System.out.println(消息)) –
@ChrisStratton,我禁用了防火牆。如果我只用一個texbox和一個按鈕執行Asynctask,當我點擊一個按鈕時,文本框中的文本顯示在javadesktop服務器中。 – user3345483
然後,您需要輸入一些日誌記錄來查找工作與非工作情況之間的差異。 –