從此代碼我可以傳輸文件與我的電腦在Android 2.3.3。(戴爾Streak),但當我運行相同的代碼在Android 4.2(三星GS 3)沒有。我認爲問題是Socket何時初始化?我必須做的是在4.2中工作嗎?Android套接字運行在薑餅,但不是在果凍豆
package com.hrandika.synchronizer.serverClient;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import android.os.AsyncTask;
import android.util.Log;
public class Client {
File sendingFile;
public Client(File sendingFile) {
Log.d("Client", "Cleint : Constructed");
this.sendingFile = sendingFile;
}
public void send(String ip) {
try {
Log.d("Client", "Cleint stating ....");
Socket socket = new Socket(ip, 5555);
Log.d("Client", "Cleint Socket Okay");
OutputStream outputStream = socket.getOutputStream();
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(
outputStream);
Log.d("Client", "Cleint ready to sent");
outputStreamWriter.write(sendingFile.getName() + "\n");
outputStreamWriter.flush();
Log.d("Client", "Cleint Sent");
InputStream inputStream = socket.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(
inputStream);
BufferedReader bufferedReader = new BufferedReader(
inputStreamReader);
String serverResponse = bufferedReader.readLine();
if (serverResponse.equals("READY")) {
Log.d("Client", "Cleint : server ready");
byte[] buffer = new byte[(int) sendingFile.length()];
FileInputStream fileInputStream = new FileInputStream(
sendingFile);
BufferedInputStream bufferedInputStream = new BufferedInputStream(
fileInputStream);
bufferedInputStream.read(buffer, 0, buffer.length);
outputStream.write(buffer, 0, buffer.length);
outputStream.flush();
bufferedInputStream.close();
fileInputStream.close();
socket.close();
}
} catch (Exception e) {
}
}
public class Sender extends AsyncTask<String, String, String>{
@Override
protected String doInBackground(String... params) {
send("192.168.43.21");
return null;
}
}
} // End class Client
use e.printStackTrace();在catch下看看這段代碼是否給出了錯誤? –
你如何實例化並啓動'Sender'?盲猜:你自己調用'doInBackground()'(這是'AsyncTask'誤用),從而導致'NetworkOnMainThreadException'? –
它顯示此11-28 17:17:52.890:W/System.err(20565):android.os.NetworkOnMainThreadException – learnwhat