AsyncTask的,doInBackground永远运行在Android版 [英] AsyncTask, doInBackground never runs in android

查看:143
本文介绍了AsyncTask的,doInBackground永远运行在Android版的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试启动我的doinbackground等待进入的消息时,它从来没有真正运行直通只是跳过它。

When i try to start my doinbackground to wait for an incoming message it never really run thru it just skips over it

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) 
    {
        Log.i("ddd","Got here before try");
        try
        {   
            InputStream in = s.getInputStream();
            Scanner r = new Scanner(in);
            Log.i("Info",s.getPort()+"");
            Log.i("ddd","Got here");
            while(s.isConnected() && r.hasNext())
            {
                String input =r.nextLine(); 
            }
        }
        catch (UnknownHostException e) 
        {
               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("123"+input);
    }

}

这是我的日志猫

 java.net.Socket.startupSocket(Socket.java:724)
04-25 23:50:26.659: W/System.err(28882):    at java.net.Socket.<init>(Socket.java:263)
04-25 23:50:26.659: W/System.err(28882):    at com.example.handy.myComs.sending_data(myComs.java:23)
04-25 23:50:26.659: W/System.err(28882):    at com.example.handy.MainActivity.readSms(MainActivity.java:277)
04-25 23:50:26.659: W/System.err(28882):    at com.example.handy.MainActivity$1.onClick(MainActivity.java:92)
04-25 23:50:26.659: W/System.err(28882):    at android.view.View.performClick(View.java:2485)
04-25 23:50:26.659: W/System.err(28882):    at android.view.View$PerformClick.run(View.java:9080)
04-25 23:50:26.659: W/System.err(28882):    at android.os.Handler.handleCallback(Handler.java:587)
04-25 23:50:26.659: W/System.err(28882):    at android.os.Handler.dispatchMessage(Handler.java:92)
04-25 23:50:26.659: W/System.err(28882):    at android.os.Looper.loop(Looper.java:130)
04-25 23:50:26.659: W/System.err(28882):    at android.app.ActivityThread.main(ActivityThread.java:3687)
04-25 23:50:26.659: W/System.err(28882):    at java.lang.reflect.Method.invokeNative(Native Method)
04-25 23:50:26.659: W/System.err(28882):    at java.lang.reflect.Method.invoke(Method.java:507)
04-25 23:50:26.659: W/System.err(28882):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
04-25 23:50:26.659: W/System.err(28882):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
04-25 23:50:26.659: W/System.err(28882):    at dalvik.system.NativeStart.main(Native Method)
04-25 23:50:26.729: I/System.out(28882): 123null

这是我在哪里叫它

public class myComs 
{
    private static int i = 0;

    public static void sending_data(String ipAddress, String message)
    {
        try
        {
            InetAddress inet = InetAddress.getByName(ipAddress);
            Socket s = new Socket(inet, 2000);
            OutputStream o = s.getOutputStream();
            PrintWriter p = new PrintWriter(o);
            while(i<1)
            {
                new Incomingdata(s).execute();
                i++;
            }
            p.println(message);
            p.flush();
        }
        catch (UnknownHostException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

你可以通过123null看到它永远不会等待为我在这跟年龄和得到任何帮助将是巨大的任何地方快速

As you can see by the 123null it never waits any help would be great as i am at this with ages and getting no where fast

感谢您

更新
好吧,我竟能直通并且知道它获得端口,但它仍然没有等待传入的数据其刚刚完成

UPDATE Right i got going thru and know its getting the port and but its still not waiting for incoming data its just finishing

推荐答案

我的问题是,我是创建套接字太多次就像一个木偶,所以我不得不刚刚创建套接字一次,然后调用它使用了无数次,现在它看起来像一个魅力的工作。

My Problem was that i was creating the socket too many times like a muppet so i had to just create the socket once and then call it use numerous times and now it seems to work like a charm

这是我的AsyncTask

This is my Asynctask

public class Incomingdata extends AsyncTask<Void,Void,String>
{

    Socket s  ;
    String input;

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


    }





    @Override
    protected String doInBackground(Void... params) 
    {Log.i("ddd","Got here before try");
        try
        {   System.out.println("Got here");
            InputStream in = s.getInputStream();
            Scanner r = new Scanner(in);
            Log.i("Info",s.getPort()+"");
            Log.i("ddd","Got here");        

            input =r.nextLine();    


        }
        catch (UnknownHostException e) 
        {

               e.printStackTrace();
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch(NoSuchElementException e)
        {
            e.printStackTrace();
        }
        return input ;
    }

    @Override
    protected void onPostExecute(String input)
    {

        String number = input.substring(0, 21).trim();
        String message = input.substring(20);
        System.out.println(""+input);
        sendSMS(number,message);
        new Incomingdata(s).execute();

    }

这是我在哪里创建套接字

This is where i am creating the socket

    public class myComs
{
    private static int i = 0;
    private static InetAddress inet;
    private static Socket s;
    private static OutputStream o;
    private static PrintWriter p;

    public static void createSocket(String ipAddress)
    {
        try
        {
            inet = InetAddress.getByName(ipAddress);

            s = new Socket(inet, 2000);
            o = s.getOutputStream();
            p = new PrintWriter(o);
            new Incomingdata(s).execute();
        }
        catch (Exception e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    public static void sending_data(String message)
    {


        p.println(message);
        p.flush();

    }

}

然后我MainActivity

And then on my MainActivity

   myComs.createSocket(getMyIp());

让我MYIP形成我的设置/获取这是我从一个输入一个文本框创建
感谢你的帮助。

Getting my Myip form my set/get which i create from an input in a textfield thank you for the help

这篇关于AsyncTask的,doInBackground永远运行在Android版的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆