簡體   English   中英

Android Studio 中的 IP 查找問題無法解析主機地址 Java

[英]Problem With IP Lookup in Android Studio Unable To resolve Host Address Java

我在 Java 中的 ip 查找程序有問題我已經導入了 Inet Adress 並實現了異步任務並在清單上使用了權限,但仍然顯示相同的問題。 錯誤:無法解析主機“[Ljava.lang.String;@f1679a5”:沒有與主機名關聯的地址我一直在互聯網上搜索,其中一些人說這是模擬器問題,但我可以在我的電腦上訪問互聯網我已經完成了他們推薦的所有操作,但仍然沒有解決方案。

這是代碼部分:

    EditText hostnumber;
TextView output;
Button submit;
ImageView back;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_lookup);
    back = findViewById(R.id.backlearn);

hostnumber = findViewById(R.id.hostnumber);
output = findViewById(R.id.outputDecimal);
submit = findViewById(R.id.submit);

back.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(Lookup.this, MainActivity.class);
        startActivity(intent);
    }
});
submit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        @SuppressLint("StaticFieldLeak") AsyncTask<String, Void, connection.Result<InetAddress>> task = new AsyncTask<String, Void, connection.Result<InetAddress>>() {
            // NOTE: this method runs in a background thread, you cannot access the View from here
            @Override
            protected connection.Result<InetAddress> doInBackground(String... hostnumber) {
                connection.Result<InetAddress> result;
                try {
                    result = new connection.Result.Success(InetAddress.getByName(String.valueOf(hostnumber)));
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                    result = new connection.Result.Failure(e);
                }catch (Exception e) {
                    result = new connection.Result.Failure(e);
                }

                return result;
            }


            @Override
            protected void onPostExecute(connection.Result<InetAddress> result) {
                if (result instanceof connection.Result.Success) {
                    output.setText((CharSequence) ((connection.Result.Success<InetAddress>) result).data);
                } else if (result instanceof connection.Result.Failure) {
                   Throwable error = ((connection.Result.Failure<InetAddress>) result).error;
                    Toast.makeText(Lookup.this,"Please Check The Address!: " +error, Toast.LENGTH_SHORT).show();

                }
            }
        };

        task.execute(hostnumber.toString());
    };
})
;}

}
class connection extends Activity {
    static class Result<T> {
        static class Success<T> extends Result<T> {
            public T data;
            public Success(T data) {
                this.data = data;
            }
        }
        static class Failure<T> extends Result<T> {
            public Throwable error;
            public Failure(Throwable error) {
                this.error = error;
            }
        }
    }

這是錯誤部分:

W/System.err: java.net.UnknownHostException: Unable to resolve host "[androidx.appcompat.widget.AppCompatEditText{f465e26 VFED..CL. .F...... 158,160-923,275 #7f0800b1 app:id/hostnumber}]": No address associated with hostname at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:156) at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:103) at java.net.InetAddress.getByName(InetAddress.java:1106) at com.modex.smartcalculator.Lookup$2$1.doInBackground(Lookup.java:50) at com.modex.smartcalculator.Lookup$2$1.doInBackground(Lookup.java:44) at android.os.AsyncTask$3.call(AsyncTask.java:378) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:919) Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname) at libcore.io.Linux.android_getaddrinfo(Native Method) at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:74) at libcore.io.BlockGuardOs.android_getaddrinfo(BlockGuardOs.java:200) W/System.err:     at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:74) at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:135) ... 10 more

我已經駕駛這個問題兩周了,仍然沒有解決方案我重新啟動了設備,與同事交談聽了所有互聯網論壇和文檔,但仍然沒有任何線索我還嘗試使用真實設備和 5 個虛擬設備和同樣的問題。 請幫忙!

您似乎使用變量名稱“hostnumber”來指代一些不同的事物。 這會造成混亂。 您可以通過選擇反映變量的使用方式及其代表的名稱來避免這種情況。

在頂層,“hostnumber”是一個 EditText GUI 組件。 您想獲取它包含的文本,而不是將組件本身轉換為字符串。 利用:

task.execute(hostnumber.getText().toString());

在 AsyncTask.doInBackground 方法中, hostnumber是一個字符串數組。 您將要使用數組中的第一個元素,因此請編寫hostnumber[0]而不是將數組本身轉換為字符串。 利用:

result = new connection.Result.Success(InetAddress.getByName(hostnumber[0]));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM