當我嘗試通過註冊用戶向數據庫添加一些數據時,我的應用程序出現問題,問題是如果php腳本中有任何錯誤或者它沒有返回json我收到錯誤和活動強制停止,而如果php中沒有錯誤並正確返回json,則所有函數都正常工作,所以我想檢查服務器的響應以知道它是否有效,所以我可以避免錯誤,下面是我的代碼:如何檢查服務器響應是否是json?
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class Register extends Activity {
Button back;
Button register;
EditText iname;
EditText iemail;
EditText ireEmail;
EditText ipassword;
EditText irePassword;
EditText iid;
EditText iphone;
EditText iaddress1;
EditText iaddress2;
// Progress Dialog
private ProgressDialog pDialog;
JSONParser jsonParser = new JSONParser();
// url to create new product
private static String url_register = "http://192.168.0.103/perfectdelivery/register.php";
// JSON Node names
private static final String TAG_SUCCESS = "success";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
iname = (EditText) findViewById(R.id.editText1);
iemail = (EditText) findViewById(R.id.editText2);
ireEmail = (EditText) findViewById(R.id.editText3);
ipassword = (EditText) findViewById(R.id.editText4);
irePassword = (EditText) findViewById(R.id.editText5);
iid = (EditText) findViewById(R.id.editText6);
iphone = (EditText) findViewById(R.id.editText7);
iaddress1 = (EditText) findViewById(R.id.editText8);
iaddress2 = (EditText) findViewById(R.id.editText9);
back = (Button) findViewById(R.id.button1);
register = (Button) findViewById(R.id.button2);
back.setOnClickListener(myhandler1);
register.setOnClickListener(myhandler2);
}
View.OnClickListener myhandler1 = new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(Register.this, MainPage.class);
startActivity(intent);
}
};
View.OnClickListener myhandler2 = new View.OnClickListener() {
public void onClick(View v) {
new NewAccount().execute();
}
};
/**
* Background Async Task to Create new product
*/
class NewAccount extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
*/
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(Register.this);
pDialog.setMessage("Registering...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
/**
* Creating product
*/
protected String doInBackground(String... args) {
String name = iname.getText().toString();
String email = iemail.getText().toString();
String reEmail = ireEmail.getText().toString();
String password = ipassword.getText().toString();
String rePassword = irePassword.getText().toString();
String id = iid.getText().toString();
String phone = iphone.getText().toString();
String address1 = iaddress1.getText().toString();
String address2 = iaddress2.getText().toString();
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("name", name));
params.add(new BasicNameValuePair("email", email));
params.add(new BasicNameValuePair("password", password));
params.add(new BasicNameValuePair("id", id));
params.add(new BasicNameValuePair("phone", phone));
params.add(new BasicNameValuePair("address1", address1));
params.add(new BasicNameValuePair("address2", address2));
// getting JSON Object
// Note that create product url accepts POST method
JSONObject json = jsonParser.makeHttpRequest(url_register,
"POST", params);
if(json != null) {
// check log cat fro response
Log.d("Create Response", json.toString());
// check for success tag
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// successfully created product
Intent i = new Intent(Register.this, MainPage.class);
startActivity(i);
// closing this screen
finish();
} else {
// failed to create product
}
} catch (JSONException e) {
e.printStackTrace();
}
}
else{
Toast.makeText(getApplicationContext(), "An error occurred, please try again", Toast.LENGTH_LONG).show();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
* *
*/
protected void onPostExecute(String file_url) {
// dismiss the dialog once done
pDialog.dismiss();
}
}
}
在try catch中解析它。如果有錯誤,它會通過塊和錯誤在json中.. chears .. !! – 2015-03-31 09:43:28
假設服務器正確設置了「Content-Type」頭字段,您可能會在嘗試處理響應正文之前檢查該字段。如果返回json,則該值應該是'application/json'。如果返回錯誤(大概不是json),它可能是例如'text/html'或'text/plain'。你應該能夠從你正在使用的任何http客戶/連接的響應對象中獲取頭文件。 – 2015-03-31 09:47:11
@MH。你能寫一個示例代碼PLZ – Mohammad 2015-03-31 09:51:28