真实手机中的数据未收到/但在模拟器中收到 - >使用 AsyncTask 和 URL



我有2个问题。首先,Toast从模拟器中的PHP服务器中获取数据,但使用Android5的真实电话中获取数据。该应用程序没有崩溃,而只是吐司空白。第二个问题:当我在模拟器中运行应用并单击按钮数据空白时,请从服务器接收到第二次单击数据。

这是我简单的PHP代码:

<?php
    echo "hi";
?>

这是Asynctask类:

package com.example.hamed.supermarketone;
import android.os.AsyncTask;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class AsyncTaskConnect extends AsyncTask {
    public String link;
    public AsyncTaskConnect(String link){
        this.link= link;
    }
    @Override
    protected Object doInBackground(Object[] params) {
        try {
            URL mUrl = new URL(link);
            URLConnection mConnecttion = mUrl.openConnection();
            BufferedReader mBuffReader = new BufferedReader(new InputStreamReader(mConnecttion.getInputStream()));
            StringBuilder mStringBuilder = new StringBuilder();
            String line = null;
            while ((line = mBuffReader.readLine())  !=null){
                mStringBuilder.append(line);
            }
            LoginPage.data=mStringBuilder.toString();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
}

和我的活动:

package com.example.hamed.supermarketone;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.text.InputType;
import android.text.method.PasswordTransformationMethod;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class LoginPage extends AppCompatActivity {
    public static String data="";
    LinearLayout mLinearLayout_gotoLogin;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.login_page);
        mLinearLayout_gotoLogin = (LinearLayout)findViewById(R.id.lnr_gotologin);
        mLinearLayout_gotoLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                 new AsyncTaskConnect("http://nikayand.com/app/").execute();
                if (!data.equals("")){
                    Toast.makeText(G.context, data,Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

感谢您的帮助: - (

执行异步任务后立即显示吐司,因此在这里永远不会有任何数据,您必须在async任务的 onPostExecute方法中显示吐司。

您也不应该像这样的活动中将数据发送到静态变量

public static String data="";
LoginPage.data=mStringBuilder.toString();

这是访问数据的不好方法

最新更新