簡體   English   中英

Android應用程序上的Java套接字異常(空)。 盡我的智慧

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM