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

时间:2017-06-23 20:38:26

标签: android url android-asynctask bufferedreader

我有两个问题。首先Toast从我的PHP服务器在模拟器中获取数据但不在Android 5的真实手机中获取数据。该应用程序没有任何崩溃但只有Toast为空。 第二个问题:当我在模拟器中运行应用程序并单击按钮数据为空时,再次单击从服务器接收的数据。

这是我简单的php代码:

<?php
    echo "hi";
?>

这是Asynctask Class:

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();
                }
            }
        });

    }
}

感谢您的帮助: - )

1 个答案:

答案 0 :(得分:2)

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

此外,您不应该将数据发送到活动中的静态变量,例如

public static String data="";

LoginPage.data=mStringBuilder.toString();

这是一种访问数据的坏方法