1

我想从我正在使用 xampp 的服务器读取数据)但数据是空的,这是我的连接活动:

public String link="";
public AsyncTaskConnect(String link){
    this.link=link;
}
@Override
protected Object doInBackground(Object[] params) {
    try{
        URL url=new URL(link);
        URLConnection connection=url.openConnection();
        BufferedReader reader=new BufferedReader(new InputStreamReader(connection.getInputStream()));
        StringBuilder builder=new StringBuilder();
        String line=null;
        while((line=reader.readLine())!=null){
            builder.append(line);
        }
        MainActivity.data=builder.toString();
    }catch (Exception e){
    }
    return "";
}

这是主要活动:

public static String data="";
TextView txthello;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    txthello=(TextView)findViewById(R.id.txthello);
    new AsyncTaskConnect("http://192.168.1.2/digikala/test.php").execute();
    txthello.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(MainActivity.this,data,Toast.LENGTH_LONG).show();
        }
    });
}

但它不起作用,我该怎么办?

4

2 回答 2

0

但数据为空

因为 execute 不是阻塞调用。

假设您实际上可以到达服务器,MainActivity.data在 Asynctask onPostExecute 之后是一个空字符串

您可以使用 Volley、Okhttp、Retrofit 等来简化您的网络代码

Android 网络库比较:OkHTTP、Retrofit 和 Volley

或将回调添加到您的 Asynctask

由于 AsyncTask 是一个单独的类,如何将 OnPostExecute() 的结果获取到主要活动?

于 2017-08-27T17:19:47.313 回答
0

使用HttpURLConnection,它扩展了你的URLConnection,所以我对你的代码做了一点改动。鉴于您在 String 变量中有查询link,这应该可以正常工作。

try {
                URL url = new URL(link);
                HttpURLConnection connection= (HttpURLConnection) url.openConnection();

                int responseCode = connection.getResponseCode();
                Log.i(TAG, "POST Response Code: " + responseCode);

                //Takes data only if response from WebService is OK
                if (responseCode == HttpURLConnection.HTTP_OK) {
                    BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                    String inputLine;
                    StringBuilder response = new StringBuilder();

                    //Stores input line by line in response
                    while ((inputLine = in.readLine()) != null) {
                        response.append(inputLine);
                    }
                    in.close();
} catch (Exception e) {
            e.printStackTrace();
}

如果您遵循此代码段,则 response 是包含您从 Web 服务获得的所有响应的字符串,您可以根据需要进一步将其转换为 JSON。

希望它有效!

于 2017-08-27T17:11:58.787 回答