0

アプリケーションでユーザーが IP アドレスを入力し、その IP エントリを使用して他のデバイスに接続したいので、少し問題があります。これら 2 つのクラスでは、IPEntry クラスは、EditText を介して IP を読み取り、それを文字列に変換するように設定されています。次に、それを ClientUpload クラス内で渡して使用したいと考えています。明らかに、私はすでにこれを解決しようとしていましたが、役に立ちませんでした。次の方法で使用すると、IPが見つからないため、転送されません。また、メソッド内に入ってそれを呼び出そうとしましたが、それも機能しませんでした。とにかくこれを行うことはありますか?

ありがとう

IPEntry クラス

public class IPEntry extends Activity {

Button Submit;
EditText IP;
TextView Thistext;
public String ipadd;
public Intent intent;

@Override
protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.ipentry);
  Submit = (Button) findViewById(R.id.bIPSubmit);
  Thistext = (TextView) findViewById(R.id.tvTextIP);
  IP = (EditText) findViewById(R.id.edIPBar);   

  Submit.setOnClickListener(new View.OnClickListener() {

     @Override
     public void onClick(View v) {
           // TODO Auto-generated method stub

                     ipadd = IP.getText().toString();

           Intent Trans = new Intent("wishift.mat.ANDROIDEXPLORER");
           startActivity(Trans);
                     }              
                     }
  );
}}

クライアント アップロード クラスの関連部分

public class ClientUpload extends Thread{

IPEntry ipentry = new IPEntry();

public int UploadFile(File file) throws UnknownHostException, IOException
{


  //loop 
  int serverPort = 6880;                  
 //   String ip = "192.168.1.73";
  String ip = ipentry.ipadd;
  Socket socket = new Socket(ip, serverPort);

ご覧のとおり、機能する部分をコメントアウトしましたが、IP を手動でコードに追加したくありません。

4

1 に答える 1

0

ここでの問題は、ここでIPEntry作成されたオブジェクトですIPEntry ipentry = new IPEntry();。ClientUpload は新しい IPEntryオブジェクトです。の同じ値を共有しませんipadd。デフォルトのコンストラクターはそれを に設定しnullます。

これを解決するには多くの方法があります。IP アドレスの引数を使用して ClientUpload にコンストラクターを追加し、Stringそれをインスタンス変数に保存するか、uploadFile() メソッドに別の引数を追加して IP アドレスを受け入れることができます。

変数を作成して、すべての IPEntry インスタンスでアクセスできるようにすることもipaddできstaticますが、これは完全に不要であり、複数のIPEntryオブジェクトがより多くの (不必要な) メモリとオーバーヘッドを必要とするため、お勧めしません。

于 2012-04-25T23:42:31.580 に答える