简体   繁体   English

JSON Android java.lang.NullPointerException

[英]JSON Android java.lang.NullPointerException

I'm getting crash while app running the activity. 应用运行活动时崩溃。
here some info detail my app code 这里一些信息详细说明了我的应用代码

LDActivity.Java LDActivity.Java

public class LDActivity extends Activity {

    private ProgressDialog pDialog, cDialog;

    JSONParser jsonParser = new JSONParser();
    GlobalVar gvar;

    private static final String LOGIN_URL = "http://deka.esy.es/track_api/";

    private boolean isDualSIM;
    private String iSIM1;
    private String iSIM2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ld);

        TelephonyInfo tf = TelephonyInfo.getInstance(this);
        gvar = ((GlobalVar)getApplicationContext());

        isDualSIM = tf.isDualSIM(); gvar.setisDualSIM(isDualSIM);
        iSIM1 = tf.getImeiSIM1(); gvar.setiSIM1(iSIM1);
        iSIM2 = tf.getImeiSIM2(); gvar.setiSIM2(iSIM2);

        if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB )
            new SessionCheck().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        else
            new SessionCheck().execute();
    }

    private class SessionCheck extends AsyncTask<String, String, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            cDialog = new ProgressDialog(LDActivity.this);
            cDialog.setMessage("Please wait checking login...");
            cDialog.setIndeterminate(false);
            cDialog.setCancelable(false);
            cDialog.show();
        }

        @Override
        protected String doInBackground(String... args) {
            int csuccess;
            Boolean cDualSIM = gvar.getisDualSIM();
            String cIMEIPhone1, cIMEIPhone2 = "";

            if(cDualSIM) {
                cIMEIPhone1 = gvar.getiSIM1();
                cIMEIPhone2 = gvar.getiSIM2();
            } else
                cIMEIPhone1 = gvar.getiSIM1();

            try {
                List<NameValuePair> cIMEI = new ArrayList<NameValuePair>();
                cIMEI.add(new BasicNameValuePair("tag", TAG_SESI));
                cIMEI.add(new BasicNameValuePair("isim1", cIMEIPhone1));
                if(cDualSIM)
                    cIMEI.add(new BasicNameValuePair("isim2", cIMEIPhone2));

                JSONObject cjson = jsonParser.makeHttpRequest(LOGIN_URL, "POST", cIMEI);
                //Log.d("Session Check ", json.toString());

                csuccess = cjson.getInt(KEY_SUCCESS);
                if (csuccess == 1) {
                    /*Intent dekatrack = new Intent(getApplicationContext(), DekaTrack.class);
                    dekatrack.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                    finish();
                    startActivity(dekatrack);*/
                    return cjson.getString(KEY_SUCCESS_MSG);
                } else
                    return cjson.getString(KEY_ERROR_MSG);
            } catch (JSONException e) {
                e.printStackTrace();
            }

            return null;

        }

        protected void onPostExecute(String cjson_msg) {
            cDialog.dismiss();
            if (cjson_msg != null) {
                Toast cts = Toast.makeText(LDActivity.this, cjson_msg, Toast.LENGTH_LONG);
                cts.setGravity(Gravity.TOP, 0, 50);
                cts.show();
            }

        }
    }
}

json index.php json index.php

<?php header('content-type: application/json; charset=utf-8');

if (isset($_POST['tag']) && $_POST['tag'] != '') {
    $tag = $_POST['tag'];

    require_once 'lib/db_inc.php';
    $db = new DB_Functions();

    $response = array("tag" => $tag, "sukses" => 0, "error" => 0);

    $isim1 = $_POST['isim1'];
    $isim2 = $_POST['isim2'];

    if ($tag == 'sesi') {
        $session1 = $db->getSession($isim1);
        if(empty($isim2))
            $session2 = "0";
        else
            $session2 = $db->getSession($isim2);

        if($session1 == "1" || $session2 == "1") {
            $response["sukses"] = 1;
            $response["sukses_msg"] = "Auto login!";
        } else if ($session1 == "0" || $session2 == "0") {
            $response["error"] = 1;
            $response["error_msg"] = "Silahkan login!";
        } else {
            $response["error"] = 2;
            $response["error_msg"] = "Silahkan daftar!";
        }
    } else 
        echo "Permintaan akses gagal!";
} else
    echo "Permintaan akses ditolak!";
?>

Error LogCat 错误的LogCat

01-15 10:11:39.343: E/JSON Parser(1331): Error parsing data org.json.JSONException: End of input at character 0 of 
01-15 10:11:39.453: E/AndroidRuntime(1331): FATAL EXCEPTION: AsyncTask #1
01-15 10:11:39.453: E/AndroidRuntime(1331): java.lang.RuntimeException: An error occured while executing doInBackground()
01-15 10:11:39.453: E/AndroidRuntime(1331):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
01-15 10:11:39.453: E/AndroidRuntime(1331):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
01-15 10:11:39.453: E/AndroidRuntime(1331):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
01-15 10:11:39.453: E/AndroidRuntime(1331):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
01-15 10:11:39.453: E/AndroidRuntime(1331):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
01-15 10:11:39.453: E/AndroidRuntime(1331):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
01-15 10:11:39.453: E/AndroidRuntime(1331):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
01-15 10:11:39.453: E/AndroidRuntime(1331):     at java.lang.Thread.run(Thread.java:856)
01-15 10:11:39.453: E/AndroidRuntime(1331): Caused by: java.lang.NullPointerException
01-15 10:11:39.453: E/AndroidRuntime(1331):     at com.skripsi.dekatrack.LDActivity$SessionCheck.doInBackground(LDActivity.java:143)
01-15 10:11:39.453: E/AndroidRuntime(1331):     at com.skripsi.dekatrack.LDActivity$SessionCheck.doInBackground(LDActivity.java:1)
01-15 10:11:39.453: E/AndroidRuntime(1331):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-15 10:11:39.453: E/AndroidRuntime(1331):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
01-15 10:11:39.453: E/AndroidRuntime(1331):     ... 4 more

DB Function 数据库功能

public function getSession($imei) {
    $result = mysql_query("SELECT session FROM login WHERE imei = '$imei'") or die(mysql_error());
    $no_of_rows = mysql_num_rows($result);
    if ($no_of_rows > 0) {
        $result = mysql_fetch_array($result);
        return $result['session'];
    } else {
        return false;
    }
}

my info table login 我的信息表登录
table login 表登录

I'm newbie in programming android and still learning.. 我是编程android的新手,还在学习。
please help me what's wrong with my code.. 请帮助我我的代码有什么问题..

EDIT : now working 编辑:现在工作

just put die(json_encode($response)); 只是把die(json_encode($ response)); in end of response json code and little bit tweaking code.. 在响应的json代码和一点点调整代码的末尾。

<?php header('content-type: application/json; charset=utf-8');

if (isset($_POST['tag']) && $_POST['tag'] != '') {
    $tag = $_POST['tag'];

    require_once 'lib/db_inc.php';
    $db = new DB_Functions();

    $response = array("tag" => $tag, "sukses" => 0, "error" => 0);

    $isim1 = $_POST['isim1'];
    $isim2 = $_POST['isim2'];

    $session1 = $db->getSession($isim1);
    $session2 = $db->getSession($isim2);


    if ($tag == 'sesi') {
        if(!empty($session1) || !empty($session2)) {
            if($session1 == "1" || $session2 == "1") {
                $response["sukses"] = 1;
                $response["sukses_msg"] = "Auto login!";
                die(json_encode($response));
            } else if ($session1 == "0" || $session2 == "0") {
                $response["error"] = 1;
                $response["error_msg"] = "Silahkan login!";
                die(json_encode($response));
            } else {
                $response["error"] = 2;
                $response["error_msg"] = "Silahkan daftar!";
                die(json_encode($response));
            }
        } else {
            $response["error"] = 1;
            $response["error_msg"] = "HP anda rusak!";
            die(json_encode($response));
        }
    } else 
        echo "Permintaan akses gagal!";
} else
    echo "Permintaan akses ditolak!";
?>



thx all for helping me with your suggestion 感谢您帮助我的建议

You should return json like this : 您应该像这样返回json:

while($row=mysql_fetch_assoc($result))
    $output[]=$row;
print(json_encode($output));

Else, Return statement in php code will not work! 否则,PHP代码中的Return语句将不起作用! Try implementing echo or print. 尝试实现回显或打印。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM