[英]Java Socket Exception (Null) on Android app. At my wits end
首先,大家好
情況:我已經開始編寫一個程序(該程序的一部分),該程序應該發送(在此階段中)發送一條簡單的消息“ Hello World!”。 從android(客戶端)到C#服務器(在我的計算機上)。 兩個設備都通過wifi連接。
簡單測試:我已經做了sendTCP(); 在我計算機上的Java中進行了測試,並在c#服務器上對其進行了測試,並且效果很好。 所以我只是將其復制到我的android代碼中。 並添加:
<uses-permission android:name="android.permission.INTERNET"/>
到清單。
問題:一旦我在手機上運行它(也曾在模擬器上嘗試過相同的問題)。 單擊按鈕后,將引發異常,並帶有exception.getMessage()== null ....因此,我的TextView更改為: asfdasnull奇怪的是,它只是null,而不是nullpointerexception。
誰能幫我? 或提示我正確的方向?
public class MainActivity extends ActionBarActivity {
Button myButton;
TextView label;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myButton = (Button) findViewById(R.id.button1);
label = (TextView) findViewById(R.id.textView1);
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
wtf("dsgfdsg1");
try{
sendTCP();
}catch(Exception ex){
wtf("asfdas"+ex.getMessage());
//System.out.println(ex.getMessage());
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void sendTCP() throws Exception{
String s = "Hello World!";
byte[] msg = new byte[1024];
msg = s.getBytes();
Socket so = new Socket("192.168.1.100", 5004);
OutputStream outstream = so.getOutputStream();
DataOutputStream datastream = new DataOutputStream(outstream);
datastream.write(msg, 0, s.length());
datastream.close();
outstream.close();
so.close();
}
public void wtf(String s){
label.setText(s);
}
}
您有一個NetworkOnMainThreadExeption
。 將sendTCP()調用放入AsyncTask或線程中。
快速答案。 我完全忘記了我需要獲取getStackTrace()而不獲取Message()。
因此,基本上,我不得不將sendTCP()扔進一個線程中,並且像一個魔術一樣工作!
謝謝你們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.