我有两个问题。首先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();
}
}
});
}
}
感谢您的帮助: - )
答案 0 :(得分:2)
您在执行异步任务后立即显示吐司,因此永远不会有任何数据,您必须在异步任务的onPostExecute
方法中显示吐司。
此外,您不应该将数据发送到活动中的静态变量,例如
public static String data="";
LoginPage.data=mStringBuilder.toString();
这是一种访问数据的坏方法