Android的将数据发送到PHP和接收问题的NullPointerException发送到、数据、问题、Android

由网友(缠绵游戏)分享简介:林新到Android的研究与开发,我不知道我失踪,让code工作。试图在应用程序中创建日志。莫不是同我收到的数据,或使用DataOutputStream发送数据的方式有问题?就是那里,是不是去precated和复杂的一个更好的办法。寻找最简约易懂的解决方案。 不要在后台code @覆盖保护布尔doInBackgr...

林新到Android的研究与开发,我不知道我失踪,让code工作。试图在应用程序中创建日志。莫不是同我收到的数据,或使用DataOutputStream发送数据的方式有问题?就是那里,是不是去precated和复杂的一个更好的办法。寻找最简约易懂的解决方案。

不要在后台code

  @覆盖保护布尔doInBackground(字符串... PARAMS){    DataOutputStream类打印输出;    HttpURLConnection的urlConn;    BufferedReader中读者;    URL网址;    JSON字符串;    的JSONObject jObj;    //发送POST登录信息到服务器    尝试{        URL =新的URL(SERVER_ADDRESS +的login.php);        urlConn =(HttpURLConnection类)url.openConnection();        urlConn.setRequestMethod(POST);        urlConn.setDoOutput(真);        urlConn.setRequestProperty(接收字符集,UTF-8);        urlConn.setReadTimeout(10000);        urlConn.setConnectTimeout(15000);        HashMap的<字符串,字符串>地图=新的HashMap<字符串,字符串>();        map.put(用户名,则params [0]);        map.put(密码,则params [1]);        StringBuilder的SB =新的StringBuilder();        对于(HashMap.Entry<字符串,字符串> E:map.entrySet()){            如果(sb.length()大于0){                sb.append(与&);            }            sb.append(URLEn coder.en code(e.getKey(),UTF-8))。追加(=)。追加(URLEn coder.en code (e.getValue(),UTF-8));        }        串loginDetails = sb.toString();        打印输出=新的DataOutputStream类(urlConn.getOutputStream());        printout.writeBytes(loginDetails);        printout.flush();        printout.close();        读者=新的BufferedReader(新的InputStreamReader(urlConn.getInputStream()));        StringBuilder的SB2 =新的StringBuilder();        字符串结果= NULL;        而((结果= reader.readLine())!= NULL){            sb2.append(结果+的' n');            Log.d(结果,sb2.toString());        };        JSON = result.toString();        jObj =新的JSONObject(JSON);        JSONLogin = jObj.getBoolean(TAG_LOGINSTATUS);        Log.d(LoginStatus !!!!,JSONLogin.toString());    }赶上(MalformedURLException的E){        e.printStackTrace();    }赶上(的ProtocolException E){        e.printStackTrace();    }赶上(IOException异常五){        e.printStackTrace();    }赶上(JSONException E){        Log.d(JsonConvertion,未能转换JSON);    }    返回JSONLogin;} 

堆栈错误

  22 10-18:43:34.169 2459年至2523年/? E / AndroidRuntime:致命的异常:AsyncTask的#110-18 22:43:34.169 2459年至2523年/? E / AndroidRuntime:工艺:com.httpkhronolog.khronolog,PID:245910-18 22:43:34.169 2459年至2523年/? E / AndroidRuntime:了java.lang.RuntimeException:执行doInBackground发生错误()10-18 22:43:34.169 2459年至2523年/? E / AndroidRuntime:在android.os.AsyncTask $ 3.done(AsyncTask.java:309)10-18 22:43:34.169 2459年至2523年/? E / AndroidRuntime:在java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)10-18 22:43:34.169 2459年至2523年/? E / AndroidRuntime:在java.util.concurrent.FutureTask.setException(FutureTask.java:223)10-18 22:43:34.169 2459年至2523年/? E / AndroidRuntime:在java.util.concurrent.FutureTask.run(FutureTask.java:242)10-18 22:43:34.169 2459年至2523年/? E / AndroidRuntime:在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:234)10-18 22:43:34.169 2459年至2523年/? E / AndroidRuntime:在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)10-18 22:43:34.169 2459年至2523年/? E / AndroidRuntime:在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:588)10-18 22:43:34.169 2459年至2523年/? E / AndroidRuntime:在java.lang.Thread.run(Thread.java:818)10-18 22:43:34.169 2459年至2523年/? E / AndroidRuntime:显示java.lang.NullPointerException:产生的原因尝试在空对象引用调用虚拟方法java.lang.String中java.lang.String.toString()10-18 22:43:34.169 2459年至2523年/? E / AndroidRuntime:在com.httpkhronolog.khronolog.Login_Activity $ checkUserDetails.doInBackground(Login_Activity.java:137)10-18 22:43:34.169 2459年至2523年/? E / AndroidRuntime:在com.httpkhronolog.khronolog.Login_Activity $ checkUserDetails.doInBackground(Login_Activity.java:79)10-18 22:43:34.169 2459年至2523年/? E / AndroidRuntime:在android.os.AsyncTask $ 2.call(AsyncTask.java:295)10-18 22:43:34.169 2459年至2523年/? E / AndroidRuntime:在java.util.concurrent.FutureTask.run(FutureTask.java:237)10-18 22:43:34.169 2459年至2523年/? E / AndroidRuntime:在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:234)10-18 22:43:34.169 2459年至2523年/? E / AndroidRuntime:在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)10-18 22:43:34.169 2459年至2523年/? E / AndroidRuntime:在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:588)10-18 22:43:34.169 2459年至2523年/? E / AndroidRuntime:在java.lang.Thread.run(Thread.java:818) 

的login.php

 < PHP    如果($ _ SERVER [REQUEST_METHOD] ==POST){       //通过传递服务器名,USER_ID及密码作为参数建立与服务器连接       $连接= mysql_connect(localhost,则someusername,密码);       //选择数据库       $ DB = mysql_select_db(khronolo_systemdb,$连接);       $用户名= $ _ POST [用户名];       $密码= $ _ POST [密码];       $查询=SELECT * FROM WHERE USER_TABLE密码= $密码'和email ='$的用户名';;       $结果= mysql_query($查询,$连接)或死亡(mysql_error($连接));       $行= mysql_num_rows($结果);       如果($行== 1){          $的returnValue [] =阵列(loginStatus=>中真);          回声json_en code($的returnValue);       }       其他{          $的returnValue [] =阵列(loginStatus=>中假);          回声json_en code($的returnValue);       }       mysql_close($连接);    }    ?> 
PHP数据类型

解决方案

使用的乱射一个从谷歌网上图书馆。遵循同样的这个教程。为了更多地了解截击参考

这链接

有也想 okHttp 。

等网络图书馆

和截至目前的code被认为是:

替换 JSON = result.toString(); JSON = sb2.toString(); 在137行

Im new to android developement and I am not sure what I missing to allow the code to work. Trying to create log in application. Could there be a problem with the way I am receiving the data or sending the data using dataoutputstream? of is there a better way that is not deprecated and complicated. Looking for the most minimalistic understandable solution.

Do in background code

@Override
protected Boolean doInBackground(String... params) {


    DataOutputStream printout;
    HttpURLConnection urlConn;
    BufferedReader reader;
    URL url;
    String json;
    JSONObject jObj;


    //send POST login details to server
    try {
        url = new URL(SERVER_ADDRESS + "login.php");
        urlConn = (HttpURLConnection) url.openConnection();
        urlConn.setRequestMethod("POST");
        urlConn.setDoOutput(true);
        urlConn.setRequestProperty("Accept-Charset", "UTF-8");
        urlConn.setReadTimeout(10000);
        urlConn.setConnectTimeout(15000);

        HashMap<String, String> map = new HashMap<String, String>();
        map.put("username", params[0]);
        map.put("password", params[1]);

        StringBuilder sb = new StringBuilder();
        for(HashMap.Entry<String, String> e : map.entrySet()){
            if(sb.length() > 0){
                sb.append("&");
            }
            sb.append(URLEncoder.encode(e.getKey(), "UTF-8")).append("=").append(URLEncoder.encode(e.getValue(), "UTF-8"));
        }


        String loginDetails = sb.toString();

        printout = new DataOutputStream(urlConn.getOutputStream());
        printout.writeBytes(loginDetails);
        printout.flush();
        printout.close();

        reader = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
        StringBuilder sb2 = new StringBuilder();
        String result = null;
        while((result=reader.readLine())!=null) {
            sb2.append(result + 'n');
            Log.d("Results", sb2.toString());
        };

        json = result.toString();

        jObj = new JSONObject(json);

        JSONLogin = jObj.getBoolean(TAG_LOGINSTATUS);
        Log.d("LoginStatus!!!!", JSONLogin.toString());

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (ProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        Log.d("JsonConvertion", "FAILED TO CONVERT JSON");
    }


    return JSONLogin;
}

Stack error

10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: Process: com.httpkhronolog.khronolog, PID: 2459
10-18 22:43:34.169 2459-2523/? E/AndroidRuntime: java.lang.RuntimeException: An error occurred while executing doInBackground()
10-18 22:43:34.169 2459-2523/? E/AndroidRuntime:     at android.os.AsyncTask$3.done(AsyncTask.java:309)
10-18 22:43:34.169 2459-2523/? E/AndroidRuntime:     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
10-18 22:43:34.169 2459-2523/? E/AndroidRuntime:     at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
10-18 22:43:34.169 2459-2523/? E/AndroidRuntime:     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
10-18 22:43:34.169 2459-2523/? E/AndroidRuntime:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
10-18 22:43:34.169 2459-2523/? E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
10-18 22:43:34.169 2459-2523/? E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
10-18 22:43:34.169 2459-2523/? E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:818)
10-18 22:43:34.169 2459-2523/? E/AndroidRuntime:  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference
10-18 22:43:34.169 2459-2523/? E/AndroidRuntime:     at com.httpkhronolog.khronolog.Login_Activity$checkUserDetails.doInBackground(Login_Activity.java:137)
10-18 22:43:34.169 2459-2523/? E/AndroidRuntime:     at com.httpkhronolog.khronolog.Login_Activity$checkUserDetails.doInBackground(Login_Activity.java:79)
10-18 22:43:34.169 2459-2523/? E/AndroidRuntime:     at android.os.AsyncTask$2.call(AsyncTask.java:295)
10-18 22:43:34.169 2459-2523/? E/AndroidRuntime:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
10-18 22:43:34.169 2459-2523/? E/AndroidRuntime:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
10-18 22:43:34.169 2459-2523/? E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
10-18 22:43:34.169 2459-2523/? E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
10-18 22:43:34.169 2459-2523/? E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:818) 

login.php

<?php

    if($_SERVER["REQUEST_METHOD"] == "POST"){
       // Establishing Connection with Server by passing server_name, user_id and password as a parameter
       $connection = mysql_connect("localhost", "someusername", "Password");
       // Selecting Database
       $db = mysql_select_db("khronolo_systemdb", $connection);

       $username = $_POST["username"];
       $password =  $_POST["password"];

       $query = "SELECT * FROM user_table WHERE password='$password' AND email='$username';";
       $result = mysql_query($query, $connection) or die (mysql_error($connection));
       $rows = mysql_num_rows($result);
       if ($rows == 1) {
          $returnValue[] = array("loginStatus"=> "true");
          echo json_encode($returnValue);
       }
       else {
          $returnValue[] = array("loginStatus"=> "false");
          echo json_encode($returnValue);
       }

       mysql_close($connection);
    }
    ?>

解决方案

Use Volley a Network Library from Google. Follow this tutorial for the same. To know more about Volley refer this link

There are also other Networking libraries like okHttp.

And as of now your code is considered :

replace json = result.toString(); with json = sb2.toString(); at line 137

阅读全文

相关推荐

最新文章