的Android做背景

问题描述:

package com.example.handy; 

import java.io.BufferedReader; 
import java.io.DataInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.InetAddress; 
import java.net.InetSocketAddress; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.io.OutputStream; 
import java.net.UnknownHostException; 
import java.util.Date; 
import java.util.NoSuchElementException; 
import java.util.Scanner; 

import android.R.integer; 
import android.app.Activity; 
import android.content.ContentResolver; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.os.StrictMode; 
import android.provider.ContactsContract; 
import android.text.format.DateFormat; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity 
{ 

    private EditText ipaddress; 
    private Button connect; 
    private Button wipe; 
    private static String myIp; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     StrictMode.ThreadPolicy policy = new StrictMode. 
     ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 



     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ipaddress = (EditText) findViewById(R.id.ipaddress_felid); 

     connect = (Button) findViewById(R.id.connect); 
     wipe =(Button) findViewById(R.id.wipe); 



     //Button press event listener 
     connect.setOnClickListener(new View.OnClickListener() 
     { 
      public void onClick(View v) 
      { 
       setMyIp(ipaddress.getText().toString()); 
       // myComs.sending_data(getMyIp() , "Got connected"); 
       try 
       { 

        InetAddress inet = InetAddress.getByName(getMyIp()); 
        Socket s = new Socket(inet, 2000); 
        new Incomingdata(s).execute(); 
        OutputStream o = s.getOutputStream(); 
        PrintWriter p = new PrintWriter(o); 





        p.println("You are connected"); 
        p.flush(); 

        readContacts(); 
        readSms(); 




       } 



       catch (UnknownHostException e) 
       { 
        ipaddress.setText("Unknown host"); 
         e.printStackTrace(); 
       } 
       catch (IOException e) 
       { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 



      } 


     }); 
     wipe.setOnClickListener(new View.OnClickListener() 
     { 
      public void onClick(View v) 
      { 
       String kill = "5"; 
       myComs.sending_data(MainActivity.getMyIp(), kill); 
       finish(); 

      } 
      }); 
    } 
public class Incomingdata extends AsyncTask<Void,Void,Void> 
{ 
    Socket s ; 
    String input; 

    public Incomingdata(Socket socket) 
    { 
     super(); 
     this.s = socket; 
    } 


    @Override 
    protected Void doInBackground(Void... params) 
    { 
     try 
     { 
      InputStream in = s.getInputStream(); 
      Scanner r = new Scanner(in); 
      while(s.isConnected()&& r.hasNext()) 
      { 
       String input =r.nextLine(); 

      } 

     } 
     catch (UnknownHostException e) 
     { 
      ipaddress.setText("Unknown host"); 
       e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     catch(NoSuchElementException e) 
     { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void input) 
    { 
     System.out.println(""+input); 
    } 

} 

我没有错误,它不是崩溃的击打其不听我的传入消息来了,这是不是显示它的Android做背景

尝试使用:

while(s.isConnected() && r.hasNext()) { 
    String input =r.nextLine(); 
} 

你而循环目前只检查你是否连接,并有可能是一个无限循环。另一方面,您的扫描器r将不会有无限数据量,因此反复调用nextLine()意味着您最终将用完数据来读取数据,并获取您所拥有的NoSuchElementException

编辑:作为注释中提到的codeMagic,您应该在onPostExecute()中的UI线程上调用setText(),而不是在doInBackground()中调用setText(),因为一旦解决此问题就会导致更多异常。

+1

此外,并非当前的问题,但你应该调用'的setText()'在不同的方法,说'onPostExecute()'因为你不能更新''在doInBackground()' – codeMagic 2013-04-25 13:20:06

+0

@codeMagic好UI'元素点。编辑。 – 2013-04-25 13:21:31

+0

右边的人我做了所有的改变,现在运行没有错误,但我现在还不知道如何得到消息 – 2013-04-25 14:13:52