android - EditText SetText 获取空值。通过 php 从 sql 中检索值

标签 android

我已经尝试了所有想到的方法,我已经研究了 2 天了。我是安卓新手。我最后的求助是求助于 Stackoverflow 上的大师们。指导我。

背景.java

protected String doInBackground(String... params) {     
        String update_id = params[1];
        try {
            URL url = new URL(update_url);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.setDoOutput(true);
            OutputStream OS = httpURLConnection.getOutputStream();
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(OS,"UTF-8"));
            String data = URLEncoder.encode("id","UTF-8") + "=" + URLEncoder.encode(update_id, "UTF-8");
            OS.write(data.getBytes());
            bufferedWriter.flush();
            OS.close();
            InputStream is = httpURLConnection.getInputStream();
            is.close();


            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(url.openStream()));
            String inputLine;
            while((inputLine = bufferedReader.readLine()) != null){
                sb.append(inputLine);
            }

            return "update";}
      @Override
          protected void onPostExecute(String result) {
          AccountDetailsFragment ac = new AccountDetailsFragment();
          ac.receiveDetails(sb);}

AccountDetailsFragment.java

public class AccountDetailsFragment extends Fragment{

EditText update_id, update_address, update_name;
String id = "";
String idd ,namee ,addresss, login_id;
View v;
public AccountDetailsFragment() {
    // Required empty public constructor
}

public void receiveLoginID(String id){
    this.login_id = id;
}

public void receiveDetails(StringBuilder sb){
    String[] strArray = sb.toString().split(Pattern.quote("split"));
    idd= strArray[0];
    namee= strArray[1];
    addresss= strArray[2];

    System.out.println("-*-*--*-*-*-*-*-*-*-*");
    System.out.println(idd);
    System.out.println(namee);
    System.out.println(addresss);
    System.out.println("*-*-*-*-*-*-*-*-*-*-*");

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    LayoutInflater lf = getActivity().getLayoutInflater();
    v = lf.inflate(R.layout.fragment_account_details, container, false);

    update_id = (EditText) v.findViewById(R.id.et_id_edit);
    update_name = (EditText) v.findViewById(R.id.et_Name_edit);
    update_address = (EditText) v.findViewById(R.id.et_address_edit);

    getActivity().setTitle("Account Details");

    Button update = (Button) v.findViewById(R.id.btnUpdate);
    update.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String method = "update";
            Background background = new Background(getContext());
            background.execute(method, login_id);

            System.out.println("*/*/*/*/*/*/*/*/*/*/*/");
            System.out.println(idd);
            System.out.println(namee);
            System.out.println(addresss);
            System.out.println("*/*/*/*/*/*/*/*/*/*/*/");

            update_id.setText(idd.toString());
            update_name.setText(namee.toString());
            update_address.setText(addresss.toString());

        }
    });

    return v;
}}

更新.php

<?php 

     require "init.php";
     $update_id=$_POST["id"];

     $sql_query="select * from test where id = '$update_id'";

     $result = mysqli_query($con,$sql_query);

    if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
       echo $row["id"];
       echo ("split");
       echo $row["name"];
       echo ("split");
       echo $row["address"];
   }
   } else {
        echo $update_id;
   }
  ?>

日志

I/System.out: */*/*/*/*/*/*/*/*/*/*/
07-25 15:55:09.367 5914-5914/com.syntillate.aazif.aazifapp I/System.out: null
07-25 15:55:09.367 5914-5914/com.syntillate.aazif.aazifapp I/System.out: null
07-25 15:55:09.367 5914-5914/com.syntillate.aazif.aazifapp I/System.out: null
07-25 15:55:09.367 5914-5914/com.syntillate.aazif.aazifapp I/System.out: 
*/*/*/*/*/*/*/*/*/*/*/

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference
                                                                               at com.syntillate.aazif.aazifapp.AccountDetailsFragment$1.onClick(AccountDetailsFragment.java:115)

最佳答案

onPostExecute()改成这个

@Override protected void onPostExecute(字符串结果){ 接收详细信息(某人); }

并且还使 Background 成为内部类(如果还没有的话)。

你正在这样做:

AccountDetailsFragment ac = new AccountDetailsFragment(); ac.receiveDetails(sb);

创建 AccountDetailsFragment 的新实例并调用 receiveDetails() 它不会更改调用类中的值(idd、namee 和地址)。

关于android - EditText SetText 获取空值。通过 php 从 sql 中检索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45301643/

相关文章:

Android - 如何将手机从深度 sleep 中唤醒并拍照?

android - 如何在android room数据库sql中使用replace?

android - Android应用程序相对布局中的ImageButton问题

android - 如何将 Disqus 集成到我的 Android 应用程序中?

android - 无法在 kotlin 中解析 JSONObject

java - 无法使用可执行文件/Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home/bin/java 确定 Java 版本

java - 在不获取新内存地址的情况下在其他线程中加载位图

android - Toolbar下的GridView——滚动时隐藏ToolBar

android - 将 matplotlib 集成到 android 应用程序中?

java - 在方法中创建弱引用