-1

ネットワーク例外のために AsyncTask に変換したいボタンクリック機能があります。

次のコードを試しました。誰かが私が間違っているところを指摘してもらえますか。

    package com.icube.homeautomation;
import java.io.DataInputStream;  
import java.io.DataOutputStream;  
import java.io.IOException;  
import java.net.Socket;  
import java.net.UnknownHostException;  

import android.R.string;
import android.app.Activity;  
import android.os.AsyncTask;
import android.os.Bundle;  
import android.os.StrictMode;
import android.view.View;  
import android.widget.Button;  
import android.widget.EditText;  
import android.widget.TextView;  

public class temp extends Activity {

    private EditText textOut; //write msg  
    private TextView textIn; //show received msg  
    private EditText ipaddressEdt; //enter ip address of server  
    private EditText portno; //port no  

    /** Called when the activity is first created. */  

    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.temp_layout);  
        ipaddressEdt = (EditText)findViewById(R.id.EditText01);  
        portno=(EditText)findViewById(R.id.EditText02);  
        textOut = (EditText)findViewById(R.id.messageedt);  
        Button buttonSend = (Button)findViewById(R.id.connecttoserver);  
        textIn = (TextView)findViewById(R.id.TextView01);  
        buttonSend.setOnClickListener(buttonSendOnClickListener);  
    }  

    Button.OnClickListener buttonSendOnClickListener  
    = new Button.OnClickListener(){  

        @Override  
        public void onClick(View arg0) {  
             new DownloadImageTask().execute(ipaddressEdt.getText().toString().trim(), Integer.parseInt(portno.getText().toString().trim()));


        }};  

        private  class DownloadImageTask extends AsyncTask <Socket ,Integer, String>{

            protected Socket doInBackground(String... data) {
                  Socket socket = null;  
                  DataOutputStream dataOutputStream = null;  
                  DataInputStream dataInputStream = null;  

                  try {  
                      socket = new Socket(data[0]);  

                      dataOutputStream = new DataOutputStream(socket.getOutputStream());  
                      dataInputStream = new DataInputStream(socket.getInputStream());  
                      dataOutputStream.writeUTF(textOut.getText().toString());  
                      textIn.setText(dataInputStream.readUTF());  
                  } catch (UnknownHostException e) {  
                      //if specified ip address is not found in the network  
                      e.printStackTrace();  
                  } catch (IOException e) {  
                      // TODO Auto-generated catch block  
                      e.printStackTrace();  
                  }  
                  finally{  
                      if (socket != null){  
                          try {  

                              socket.close();  
                          } catch (IOException e) {  
                              e.printStackTrace();  
                          }  
                      }  

                      if (dataOutputStream != null){  
                          try {  
                              //close outputstream  
                              dataOutputStream.close();  
                          } catch (IOException e) {  
                              // TODO Auto-generated catch block  
                              e.printStackTrace();  
                          }  
                      }  

                      if (dataInputStream != null){  
                          try {  
                              //close inputsteam  
                              dataInputStream.close();  
                          } catch (IOException e) {  
                              // TODO Auto-generated catch block  
                              e.printStackTrace();  
                          }  
                      }  
                  }  
                  return socket;
            }
            protected void onProgressUpdate(Integer... progress) {

            }

            protected void onPostExecute(String result) {
                 textIn.setText(result); 
            }
        }
   }

次のエラーが表示されます

タイプ temp.DownloadImageTask は、継承された抽象メソッド AsyncTask.doInBackground(Socket...) を実装する必要があります。

ありがとう、

4

1 に答える 1

0

問題はここにあります:

protected Socket doInBackground(String... data) { //<<<
           ^^^^
     //......
}

doInBackground をジェネリック型 param として AsyncTask に渡した正しい戻り値の型でオーバーライドしていないためです。doInBackground の戻り値の型を Socket ではなく String に変更します。

@Override 
protected String doInBackground(String... data) { //<<<

   return "any string";
}
于 2013-03-29T07:30:35.067 に答える