2014-01-15 103 views
0

我在運行應用程序時崩潰了。
這裏的一些信息細節我的應用程序代碼
JSON Android java.lang.NullPointerException

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

<?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!"; 
?> 

錯誤的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功能

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; 
    } 
} 

我的信息表登錄
table login

我在編程的Android新手,還在學習..
請幫我什麼地方錯了我代碼..

編輯:現在正在工作

只是死die(json_encode($ response));在響應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的所有幫助我同意你的建議

+0

請粘貼你的json響應字符串.. –

+0

我不知道如何得到json響應字符串..你能解釋一下這一步嗎? –

+0

兄弟你的網址回覆 –

回答

1

你應該返回JSON這樣的:

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

否則,PHP代碼中的Return語句不起作用!嘗試執行回聲或打印。

+0

我的代碼可以返回值,但我只是忘了把使用json響應(json_encode($ response)); –

相關問題