2

ソケットを使用してサーバーに正常に接続できます。問題は、アクティビティの読み込みに時間がかかりすぎることです。ハンドラーとランナブルを使用して、ネットワーク クラスのすべての行の TextView を変更しています。すべてが完了したようで、出力が得られます...バックグラウンドで実行され、アプリがすぐに読み込まれると考えて、ネットワークをスレッドとして作成しました。何か提案はありますか?

主な活動

package com.abhishek.ally2;

import android.os.Bundle;
import android.os.Handler;
import android.os.StrictMode;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {
    TextView textview;
    String header;
    @SuppressLint("NewApi") @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (android.os.Build.VERSION.SDK_INT > 9) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }
        textview = (TextView)findViewById(R.id.status);
        header = "GET /ally.php HTTP/1.0\nHost: easyvote.co.in\n\n";
        Handler handler = new Handler();
        Thread connect = new network("easyvote.co.in", 80, header, textview, handler);
        connect.start();
        ((network) connect).statusShow();

    }

    @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;
    }

}

ネットワーク クラス

package com.abhishek.ally2;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

import android.os.Handler;
import android.util.Log;
import android.widget.TextView;


public class network extends Thread {
    Socket client = null;
    DataOutputStream os = null;
    DataInputStream is = null;
    String host;
    int port;
    String responseLine;
    String data;
    String lastMsg;
    public boolean status;
    Handler handler;
    TextView txt;
    Runnable r;
    int count;
    network(String host, int port, String data, TextView status, Handler handler)
    {
        this.status = false;
        this.txt = status;
        this.handler = handler;
        this.host = host;
        this.port = port;
        this.data = data;
        count = 0;
        //while(!status)
        r = new Runnable(){

            @Override
            public void run() {
                //Log.d("Response", responseLine);
                txt.setText("Connecting...");

            }

        };
        this.handler.post(r);

    }
    @SuppressWarnings({ "deprecation" })
    public void statusShow()
    {
        try 
        {
            client = new Socket(host, port);
            os = new DataOutputStream(client.getOutputStream());
            is = new DataInputStream(client.getInputStream());
            if(client != null && os != null && is != null)
            {
                os.writeBytes(data);
                while((responseLine = is.readLine()) != null)
                {
                    lastMsg = responseLine;
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    Log.d("Response", responseLine);
                }
                os.close();
                is.close();
                client.close();
                Log.d("Response", lastMsg);
                r = new Runnable(){

                    @Override
                    public void run() {

                        txt.setText(lastMsg);

                    }

                };
                this.handler.post(r);

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

}

前もって感謝します :)

4

1 に答える 1

2

statusShow()のメソッドからonCreate()メソッドを呼び出していMainActivityます。

したがって、関数は UI/メイン スレッドで実行されます。内からそのメソッドを呼び出してみてくださいRunnable r。その後、メインスレッドをブロックしません。

編集:これはうまくいくかもしれません(私はテストしていません)

以下のコードは機能するかもしれませんが、間違っています。あなたがやっている方法では、別のクラスさえ必要ありません(それをからサブクラス化することは言うまでもありませんThread)。Runnable rあなたはMainActivity完全にそれをそこに書くことができますpost

主な活動:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
    textview = (TextView)findViewById(R.id.status);
    header = "GET /ally.php HTTP/1.0\nHost: easyvote.co.in\n\n";
    Handler handler = new Handler();
    Thread connect = new network("easyvote.co.in", 80, header, textview, handler);
    connect.start();
}

ネットワーク クラス:

network(String host, int port, String data, TextView status, Handler handler)
{
    this.status = false;
    this.txt = status;
    this.handler = handler;
    this.host = host;
    this.port = port;
    this.data = data;
    count = 0;
    //while(!status)
    r = new Runnable(){

        @Override
        public void run() {
            //Log.d("Response", responseLine);
            txt.setText("Connecting...");
            String result = statusShow();
            txt.setText(result);
        }

    };
    this.handler.post(r);

}
@SuppressWarnings({ "deprecation" })
public void statusShow()
{
    try 
    {
        client = new Socket(host, port);
        os = new DataOutputStream(client.getOutputStream());
        is = new DataInputStream(client.getInputStream());
        if(client != null && os != null && is != null)
        {
            os.writeBytes(data);
            while((responseLine = is.readLine()) != null)
            {
                lastMsg = responseLine;
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                Log.d("Response", responseLine);
            }
            os.close();
            is.close();
            client.close();
            Log.d("Response", lastMsg);

            return lastMsg;
        }
    } 
    catch (UnknownHostException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return "Error";
}
于 2013-07-01T04:41:52.397 に答える