我有四个编辑文本和按钮和php json webservice在我的应用程序。我试图将这些编辑文本值发送到php页面使用json。如果值到达php页面,它将返回success=1
,否则它返回success=2
,但当我点击提交按钮应用程序强制关闭。这是我的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mhost=(EditText) findViewById(R.id.field_host);
mdb=(EditText) findViewById(R.id.field_db);
muser=(EditText) findViewById(R.id.field_user);
mpassword=(EditText) findViewById(R.id.field_password);
mConnection=(Button) findViewById(R.id.insert);
mConnection.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new Connect().execute();
}
});
}
class Connect extends AsyncTask<String, String, String>{
@Override
protected String doInBackground(String... args) {
// TODO Auto-generated method stub
String HOST=mhost.getText().toString();
String USER=muser.getText().toString();
String DB=mdb.getText().toString();
String PASSWORD=mpassword.getText().toString();
List<NameValuePair> params=new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("nfc_tag", HOST));
params.add(new BasicNameValuePair("meter_reading", USER));
params.add(new BasicNameValuePair("reading_datetime", DB));
params.add(new BasicNameValuePair("image_name", PASSWORD));
JSONObject json=jp.makeHttpRequest(connection_url, "POST", params);
try {
int success=json.getInt(Tag_success);
if(success==1){
Toast.makeText(getApplicationContext(), "Connected :-)", Toast.LENGTH_LONG);
}else{
Toast.makeText(getApplicationContext(), "Not Connected :(", Toast.LENGTH_LONG);
}
} catch (JSONException e) {
// TODO: handle exception
e.printStackTrace();
}
return null;
}
}
Json解析器public class JsonParser {
static InputStream IS=null;
static JSONObject JB=null;
static String json="";
public JsonParser(){
}
public JSONObject makeHttpRequest(String url,String method,List<NameValuePair> params){
try {
if(method=="POST"){
DefaultHttpClient httpClient=new DefaultHttpClient();
HttpPost httpPost=new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
}else if(method=="GET"){
DefaultHttpClient httpClient=new DefaultHttpClient();
String paramaString =URLEncodedUtils.format(params, "utf-8");
url +="?"+paramaString;
HttpGet httpGet=new HttpGet(url);
HttpResponse httpresponse=httpClient.execute(httpGet);
HttpEntity httpEntity=httpresponse.getEntity();
IS=httpEntity.getContent();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}catch (ClientProtocolException e) {
// TODO: handle exception
}catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}
try {
BufferedReader reader=new BufferedReader(new InputStreamReader(IS,"iso-8859"),8);
StringBuilder sb=new StringBuilder();
String line=null;
while((line=reader.readLine())!=null){
sb.append(line+"'n");
}
IS.close();
json=sb.toString();
} catch (Exception e) {
// TODO: handle exception
Log.e("Buffer Error","Connection Error"+e.toString());
}
try {
JB=new JSONObject(json);
} catch (JSONException e) {
// TODO: handle exception
Log.e("JSON Parser", e.toString());
}
return JB;
}
PHP脚本<?php
include('connection.php');
$host=$_POST['nfc_tag'];
$user=$_POST['meter_reading'];
$db=$_POST['reading_datetime'];
$password=$_POST['image_name'];
$response=array();
if($host){
$response['success']=1;
}else{
$response['success']=2;
}
echo json_encode($response);
?>
LogCat
09-14 15:58:40.823: E/Buffer Error(11735): Connection Errorjava.lang.NullPointerException: lock == null
09-14 15:58:40.833: E/JSON Parser(11735): org.json.JSONException: End of input at character 0 of
09-14 15:58:40.833: E/AndroidRuntime(11735): Exception
09-14 15:58:40.833: E/AndroidRuntime(11735): FATAL EXCEPTION: AsyncTask #1
09-14 15:58:40.833: E/AndroidRuntime(11735): Process: com.example.test_webservice, PID: 11735
09-14 15:58:40.833: E/AndroidRuntime(11735): java.lang.RuntimeException: An error occured while executing doInBackground()
09-14 15:58:40.833: E/AndroidRuntime(11735): at android.os.AsyncTask$3.done(AsyncTask.java:300)
09-14 15:58:40.833: E/AndroidRuntime(11735): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
09-14 15:58:40.833: E/AndroidRuntime(11735): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
09-14 15:58:40.833: E/AndroidRuntime(11735): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
09-14 15:58:40.833: E/AndroidRuntime(11735): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
09-14 15:58:40.833: E/AndroidRuntime(11735): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
09-14 15:58:40.833: E/AndroidRuntime(11735): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
09-14 15:58:40.833: E/AndroidRuntime(11735): at java.lang.Thread.run(Thread.java:841)
09-14 15:58:40.833: E/AndroidRuntime(11735): Caused by: java.lang.NullPointerException
09-14 15:58:40.833: E/AndroidRuntime(11735): at com.example.test_webservice.MainActivity$Connect.doInBackground(MainActivity.java:114)
09-14 15:58:40.833: E/AndroidRuntime(11735): at com.example.test_webservice.MainActivity$Connect.doInBackground(MainActivity.java:1)
09-14 15:58:40.833: E/AndroidRuntime(11735): at android.os.AsyncTask$2.call(AsyncTask.java:288)
09-14 15:58:40.833: E/AndroidRuntime(11735): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
试试这个:
include('connection.php');
$host=$_POST['nfc_tag'];
$user=$_POST['meter_reading'];
$db=$_POST['reading_datetime'];
$password=$_POST['image_name'];
$response=array();
if($host != NULL){
$response['success']=1;
}else{
$response['success']=2;
}
echo json_encode($response);