Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么此应用程序中的Toast不显示任何内容?_Java_Php_Android_Mysql - Fatal编程技术网

Java 为什么此应用程序中的Toast不显示任何内容?

Java 为什么此应用程序中的Toast不显示任何内容?,java,php,android,mysql,Java,Php,Android,Mysql,我编写了一个连接到wamp服务器的应用程序(使用一个MySQl数据库,它在表users中的一行有Username=“pooriya”和Password=“123”) 此应用程序检查用户名“pooriya”是否存在,然后删除密码,如果不存在,删除“no user” 当我在emulator上运行这个应用程序时,它应该是“123”,但是 显示空吐司。为什么? 即使我将用户更改为不存在的用户名,如“poori”,也会再次显示空Toast。为什么? 数据库名称为“note\u test\u 2\u db”

我编写了一个连接到wamp服务器的应用程序(使用一个MySQl数据库,它在表users中的一行有Username=“pooriya”和Password=“123”) 此应用程序检查用户名“pooriya”是否存在,然后删除密码,如果不存在,删除“no user”

当我在emulator上运行这个应用程序时,它应该是“123”,但是 显示空吐司。为什么? 即使我将用户更改为不存在的用户名,如“poori”,也会再次显示空Toast。为什么? 数据库名称为“note\u test\u 2\u db” 当我在浏览器中输入地址“”时,它显示“no user”,那么我猜php文件工作正常,问题出在我的android代码中。 谢谢


问题:显示
Toast
的代码似乎不正确

new getdata("http://127.0.0.1:8080/mysite1/index.php", "pooriya").execute();

btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Toast.makeText(getApplicationContext(), res, Toast.LENGTH_LONG).show();
    }
});
当执行第一行时,应用程序将启动
异步任务
,该任务连接到服务器以获取响应(
“123”
“无用户”

如果在
AsyncTask
完成之前单击按钮
btn
,此时
res
的值为
,这就是为什么您总是得到空的
Toast

解决方案:您可以执行以下步骤

步骤1:因为
getdata
是一个单独的类,所以需要定义一个接口将数据(
“123”
“无用户”
或任何值)传递回
MyActivity

public interface OnDataListener {
    void onData(String result);
}
步骤2:修改
getdata
class

public class getdata extends AsyncTask<Object, Void, String> {
    private String Link = "";
    private String User = "";
    private WeakReference<OnDataListener> mListener;

    public getdata(String link, String user, OnDataListener listener) {
        Link = link;
        User = user;
        mListener = new WeakReference<>(listener);
    }

    @Override
    protected String doInBackground(Object... objects) {
        try {
            String data = URLEncoder.encode("username", "UTF8") + "=" + URLEncoder.encode(User, "UTF8");

            URL mylink = new URL(Link);
            URLConnection connect = mylink.openConnection();

            connect.setDoOutput(true);
            OutputStreamWriter wr = new OutputStreamWriter(connect.getOutputStream());
            wr.write(data);
            wr.flush();

            BufferedReader reader = new BufferedReader(new InputStreamReader(connect.getInputStream()));
            StringBuilder sb = new StringBuilder();

            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }

            // This string will pass as param of onPostExecute method.
            return sb.toString(); // Will return "123" or "No User" if there is no exception occurs.
        } catch (Exception e) {
        }

        // If your app reach this line, it means there is an exception occurs, using a unique string for debugging.
        // This string will pass as param of onPostExecute method
        return "An exception has been caught!!!";
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);

        // Pass the result back to MyActivity's onData method.
        if (mListener != null && mListener.get() != null) {
            mListener.get().onData(result);
        }
    }
}

注意:因为连接到服务器时不使用任何加载指示器,所以需要等待几秒钟才能在屏幕上看到Toast。

我解决了这个问题。我应该改为使用

您是否已将internet权限添加到清单文件中?像这样检查它,如果它不起作用,请告诉我
Toast.makeText(MyActivity.this,“您好,这是Toast”,Toast.LENGTH_LONG).show()
http://127.0.0.1:8080
不是您需要使用的IP地址。127.0.0.1是仿真器本身的地址。另外,您忽略了异常,这就是为什么您不知道有问题。永远,永远,永远不要相信用户输入!行
$user=$\u POST['username']可用于执行SQLInjection!使用
mysql\u real\u Escape\u字符串转义数据
或使用
PDO
您的toast消息为空。如果消息为空,您希望向用户显示什么???
public interface OnDataListener {
    void onData(String result);
}
public class getdata extends AsyncTask<Object, Void, String> {
    private String Link = "";
    private String User = "";
    private WeakReference<OnDataListener> mListener;

    public getdata(String link, String user, OnDataListener listener) {
        Link = link;
        User = user;
        mListener = new WeakReference<>(listener);
    }

    @Override
    protected String doInBackground(Object... objects) {
        try {
            String data = URLEncoder.encode("username", "UTF8") + "=" + URLEncoder.encode(User, "UTF8");

            URL mylink = new URL(Link);
            URLConnection connect = mylink.openConnection();

            connect.setDoOutput(true);
            OutputStreamWriter wr = new OutputStreamWriter(connect.getOutputStream());
            wr.write(data);
            wr.flush();

            BufferedReader reader = new BufferedReader(new InputStreamReader(connect.getInputStream()));
            StringBuilder sb = new StringBuilder();

            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }

            // This string will pass as param of onPostExecute method.
            return sb.toString(); // Will return "123" or "No User" if there is no exception occurs.
        } catch (Exception e) {
        }

        // If your app reach this line, it means there is an exception occurs, using a unique string for debugging.
        // This string will pass as param of onPostExecute method
        return "An exception has been caught!!!";
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);

        // Pass the result back to MyActivity's onData method.
        if (mListener != null && mListener.get() != null) {
            mListener.get().onData(result);
        }
    }
}
public class MyActivity extends AppCompatActivity implements OnDataListener {

    public static String res = "";
    Button btn;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn = (Button) findViewById(R.id.button);
        new getdata("http://127.0.0.1:8080/mysite1/index.php", "pooriya", this).execute();

        // TODO: Comment-out this code
//        btn.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                Toast.makeText(getApplicationContext(), res, Toast.LENGTH_LONG).show();
//            }
//        });
    }

    @Override
    public void onData(String result) {
        // result is passed from the AsyncTask's onPostExecute method.
        Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show();
    }
}