实际数据 phone 未收到/但在模拟器中收到 -> 使用 AsyncTask 和 URL
data in real phone not received / But in emulator received ->use AsyncTask and URL
我有两个问题。首先,Toast 从我在模拟器中的 PHP 服务器获取数据,但不是真正的 phone 和 android 5. 该应用程序没有任何崩溃,但只是 Toast empty 。
第二个问题:当我在模拟器中 运行 应用程序并单击按钮数据变空并且第二次单击从服务器接收到数据时。
这是我的简单 php 代码:
<?php
echo "hi";
?>
这是异步任务 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 "";
}
}
和我的 Activity:
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();
}
}
});
}
}
感谢您的帮助:-)
您在执行异步任务后立即显示吐司,因此那里永远不会有任何数据,您必须在异步任务的 onPostExecute
方法中显示吐司。
此外,您不应该像这样
将数据发送到 activity 中的静态变量
public static String data="";
LoginPage.data=mStringBuilder.toString();
这是访问数据的糟糕方式
我有两个问题。首先,Toast 从我在模拟器中的 PHP 服务器获取数据,但不是真正的 phone 和 android 5. 该应用程序没有任何崩溃,但只是 Toast empty 。 第二个问题:当我在模拟器中 运行 应用程序并单击按钮数据变空并且第二次单击从服务器接收到数据时。
这是我的简单 php 代码:
<?php
echo "hi";
?>
这是异步任务 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 "";
}
}
和我的 Activity:
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();
}
}
});
}
}
感谢您的帮助:-)
您在执行异步任务后立即显示吐司,因此那里永远不会有任何数据,您必须在异步任务的 onPostExecute
方法中显示吐司。
此外,您不应该像这样
将数据发送到 activity 中的静态变量public static String data="";
LoginPage.data=mStringBuilder.toString();
这是访问数据的糟糕方式