[英]Json object converting error
我正在嘗試使用json將android與php和mysql連接起來。 這是我要添加數據的編碼的一部分。
基於編碼
私有靜態字符串url_create_fixture =“ http:// android_connect / create_product.php”;
如果我通過android手機而不是模擬器測試此應用程序,則IP地址應該是什么?
另一個問題,我在電話上測試了此應用程序,並說process.com.example.mobile_fixtures意外停止工作。 請再試一次。
是因為IP錯誤還是我的程序有問題?
包com.example.chatapp;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONObject;
import com.example.chatapp.ChatApp.Login;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class Signup extends Activity{
Button btnSignup;
EditText textName;
EditText textMail;
EditText textUname;
EditText textPassword;
JSONParser jsonParser;
private ProgressDialog pDialog;
private static final String TAG_SUCCESS = "success";
private static String login_rest = "link";
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.signup);
btnSignup = (Button) findViewById(R.id.join);
textName = (EditText) findViewById(R.id.name);
textMail = (EditText) findViewById(R.id.mail);
textUname = (EditText) findViewById(R.id.username);
textPassword = (EditText) findViewById(R.id.password);
btnSignup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Join().execute();
}
});
}
class Join extends AsyncTask<String, String, String> {
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(Signup.this);
pDialog.setMessage("Join ChatApp.....");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
protected String doInBackground(String... args) {
String uname = textUname.getText().toString();
String password = textPassword.getText().toString();
String mail = textMail.getText().toString();
String name = textName.getText().toString();
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("uname",uname));
params.add(new BasicNameValuePair("password",password));
params.add(new BasicNameValuePair("mail",mail));
params.add(new BasicNameValuePair("name",name));
params.add(new BasicNameValuePair("call_name","signup"));
System.out.println("output"+params.toString());
jsonParser = new JSONParser();
JSONObject json = jsonParser.makeHttpRequest(login_rest,
"POST", params);
System.out.println("output"+json.toString());
return null;
}
protected void onPostExecute(String file_url) {
// dismiss the dialog once done
pDialog.dismiss();
}
}
}
IT顯示錯誤:
08-21 19:47:41.368: I/dalvikvm(950): threadid=3: reacting to signal 3
08-21 19:47:41.489: I/dalvikvm(950): Wrote stack traces to '/data/anr/traces.txt'
08-21 19:47:41.689: D/dalvikvm(950): GC_FOR_ALLOC freed 72K, 3% free 9117K/9347K, paused 48ms
08-21 19:47:41.739: I/dalvikvm-heap(950): Grow heap (frag case) to 17.759MB for 9216016-byte allocation
08-21 19:47:41.839: D/dalvikvm(950): GC_CONCURRENT freed 1K, 2% free 18116K/18375K, paused 3ms+13ms
08-21 19:47:41.869: I/dalvikvm(950): threadid=3: reacting to signal 3
08-21 19:47:41.879: I/dalvikvm(950): Wrote stack traces to '/data/anr/traces.txt'
08-21 19:47:42.379: I/dalvikvm(950): threadid=3: reacting to signal 3
08-21 19:47:42.389: I/dalvikvm(950): Wrote stack traces to '/data/anr/traces.txt'
08-21 19:47:42.429: D/gralloc_goldfish(950): Emulator without GPU emulation detected.
08-21 19:47:57.299: D/InputEventConsistencyVerifier(950): KeyEvent: ACTION_UP but key was not down.
08-21 19:47:57.299: D/InputEventConsistencyVerifier(950): in android.widget.EditText@41b95b10
08-21 19:47:57.299: D/InputEventConsistencyVerifier(950): 0: sent at 1193611000000, KeyEvent { action=ACTION_UP, keyCode=KEYCODE_DPAD_DOWN, scanCode=108, metaState=0, flags=0x8, repeatCount=0, eventTime=1193611, downTime=1193611, deviceId=0, source=0x301 }
08-21 19:47:59.879: D/InputEventConsistencyVerifier(950): KeyEvent: ACTION_UP but key was not down.
08-21 19:47:59.879: D/InputEventConsistencyVerifier(950): in android.widget.Button@41b975a0
08-21 19:47:59.879: D/InputEventConsistencyVerifier(950): 0: sent at 1196095000000, KeyEvent { action=ACTION_UP, keyCode=KEYCODE_DPAD_DOWN, scanCode=108, metaState=0, flags=0x8, repeatCount=0, eventTime=1196095, downTime=1196095, deviceId=0, source=0x301 }
08-21 19:48:00.279: I/System.out(950): output[uname=ttt, password=ttt, mail=ttt, name=tt, call_name=signup]
08-21 19:48:01.839: E/JSON Parser(950): Error parsing data org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject
08-21 19:48:01.879: W/dalvikvm(950): threadid=12: thread exiting with uncaught exception (group=0x409c01f8)
08-21 19:48:01.939: E/AndroidRuntime(950): FATAL EXCEPTION: AsyncTask #1
08-21 19:48:01.939: E/AndroidRuntime(950): java.lang.RuntimeException: An error occured while executing doInBackground()
08-21 19:48:01.939: E/AndroidRuntime(950): at android.os.AsyncTask$3.done(AsyncTask.java:278)
08-21 19:48:01.939: E/AndroidRuntime(950): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
08-21 19:48:01.939: E/AndroidRuntime(950): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
08-21 19:48:01.939: E/AndroidRuntime(950): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
08-21 19:48:01.939: E/AndroidRuntime(950): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
08-21 19:48:01.939: E/AndroidRuntime(950): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
08-21 19:48:01.939: E/AndroidRuntime(950): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
08-21 19:48:01.939: E/AndroidRuntime(950): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
08-21 19:48:01.939: E/AndroidRuntime(950): at java.lang.Thread.run(Thread.java:856)
08-21 19:48:01.939: E/AndroidRuntime(950): Caused by: java.lang.NullPointerException
08-21 19:48:01.939: E/AndroidRuntime(950): at com.example.chatapp.Signup$Join.doInBackground(Signup.java:72)
08-21 19:48:01.939: E/AndroidRuntime(950): at com.example.chatapp.Signup$Join.doInBackground(Signup.java:1)
08-21 19:48:01.939: E/AndroidRuntime(950): at android.os.AsyncTask$2.call(AsyncTask.java:264)
08-21 19:48:01.939: E/AndroidRuntime(950): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
08-21 19:48:01.939: E/AndroidRuntime(950): ... 5 more
08-21 19:48:02.739: I/dalvikvm(950): threadid=3: reacting to signal 3
08-21 19:48:02.779: I/dalvikvm(950): Wrote stack traces to '/data/anr/traces.txt'
08-21 19:48:03.499: E/WindowManager(950): Activity com.example.chatapp.Signup has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@41bb29e0 that was originally added here
08-21 19:48:03.499: E/WindowManager(950): android.view.WindowLeaked: Activity com.example.chatapp.Signup has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@41bb29e0 that was originally added here
08-21 19:48:03.499: E/WindowManager(950): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:344)
08-21 19:48:03.499: E/WindowManager(950): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:267)
08-21 19:48:03.499: E/WindowManager(950): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215)
08-21 19:48:03.499: E/WindowManager(950): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140)
08-21 19:48:03.499: E/WindowManager(950): at android.view.Window$LocalWindowManager.addView(Window.java:537)
08-21 19:48:03.499: E/WindowManager(950): at android.app.Dialog.show(Dialog.java:278)
08-21 19:48:03.499: E/WindowManager(950): at com.example.chatapp.Signup$Join.onPreExecute(Signup.java:55)
08-21 19:48:03.499: E/WindowManager(950): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:561)
08-21 19:48:03.499: E/WindowManager(950): at android.os.AsyncTask.execute(AsyncTask.java:511)
08-21 19:48:03.499: E/WindowManager(950): at com.example.chatapp.Signup$1.onClick(Signup.java:43)
08-21 19:48:03.499: E/WindowManager(950): at android.view.View.performClick(View.java:3511)
08-21 19:48:03.499: E/WindowManager(950): at android.view.View$PerformClick.run(View.java:14105)
08-21 19:48:03.499: E/WindowManager(950): at android.os.Handler.handleCallback(Handler.java:605)
08-21 19:48:03.499: E/WindowManager(950): at android.os.Handler.dispatchMessage(Handler.java:92)
08-21 19:48:03.499: E/WindowManager(950): at android.os.Looper.loop(Looper.java:137)
08-21 19:48:03.499: E/WindowManager(950): at android.app.ActivityThread.main(ActivityThread.java:4424)
08-21 19:48:03.499: E/WindowManager(950): at java.lang.reflect.Method.invokeNative(Native Method)
08-21 19:48:03.499: E/WindowManager(950): at java.lang.reflect.Method.invoke(Method.java:511)
08-21 19:48:03.499: E/WindowManager(950): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-21 19:48:03.499: E/WindowManager(950): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-21 19:48:03.499: E/WindowManager(950): at dalvik.system.NativeStart.main(Native Method)
08-21 19:48:16.229: I/Process(950): Sending signal. PID: 950 SIG: 9
PHP編碼:
<?php
require_once __DIR__ . '/db_connect.php';
/*
* Following code will create a new product row
* All product details are read from HTTP GET Request
*/
class chatappCall {
// mysql inserting a new row
function login($param)
{
$response = array();
if(isset($param['uname'])&&isset($param['password']))
{
$db = new DB_CONNECT();
$db_conn = $db->getConnected();
$result = mysqli_query($db_conn,"select * from users where uname='".$param['uname']."' and password='".$param['password']."'");
if(!empty($result)) {
// successfully inserted into database
$result = mysqli_fetch_array($result);
//$detail = array();
$response["id"] = $result["id"];
$response["name"] = $result["name"];
// success
$response["success"] = 1;
return $response;
} else {
// failed to insert row
$response["success"] = 0;
$response["message"] = "Oops! An error occurred.";
return $response;
}
}
else
{
// required field is missing
$response["success"] = 0;
$response["message"] = "Invalid Username/Password.";
// echoing JSON response
return $response;
}
}
function signup($param)
{
$response = array();
if(isset($param['uname'])&&isset($param['password']))
{
$db = new DB_CONNECT();
$db_conn = $db->getConnected();
$result = mysqli_query($db_conn,"INSERT INTO `users`(`uname`, `password`, `name`, `mail`) VALUES ('".$param['uname']."','".$param['password']."','".$param['name']."','".$param['mail']."')";
if($result) {
// successfully inserted into database
$result = mysqli_fetch_array($result);
$response["success"] = 1;
$response["message"] = "Join Success Fully With ChatApp";
return $response;
} else {
// failed to insert row
$response["success"] = 0;
$response["message"] = "Oops! An error occurred.";
$response["qwe"]="('".$param['uname']."','".$param['password']."','".$param['name']."','".$param['mail']." )";
return $response;
}
}
else
{
// required field is missing
$response["success"] = 0;
$response["message"] = "Error In Input.";
// echoing JSON response
return $response;
}
}
}
?>
您的JSON解析錯誤可能是由於您的服務器端代碼輸出了非JSON文本。 鑒於這種:
[..snip..].JSONException: Value <br of type java.lang.[..snip..]
^^^
您可能會遇到PHP錯誤/警告,並隨同JSON一起輸出嵌入的html,從而破壞了它。 您應該嘗試直接在瀏覽器中點擊服務URL並查看返回的結果,或者在嘗試解析之前在Android應用中記錄原始響應字符串。
您的PHP代碼幾乎肯定也容易受到sql注入攻擊的攻擊 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.