2012-11-16 2 views
-1

로 변환 할 수 없습니다 :java.lang.String의 데이터베이스에서 데이터를 검색 할 때 나는 그 문제에 직면하고있어 된 JSONObject

Error parsing data org.json.JSONException: Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject 



public class AllProductsActivity extends ListActivity { 

    // Progress Dialog 
    private ProgressDialog pDialog; 

    // Creating JSON Parser object 
    JSONParser jParser = new JSONParser(); 

    ArrayList<HashMap<String, String>> productsList; 

    // url to get all products list 
    private static String url_all_products = "http://192.168.1.3/android_connect/get_all_products.php"; 

    // JSON Node names 
    private static final String TAG_SUCCESS = "success"; 
    private static final String TAG_PRODUCTS = "products"; 
    private static final String TAG_PID = "pid"; 
    private static final String TAG_NAME = "name"; 

    // products JSONArray 
    JSONArray products = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.all_products); 

     // Hashmap for ListView 
     productsList = new ArrayList<HashMap<String, String>>(); 

     // Loading products in Background Thread 
     new LoadAllProducts().execute(); 

     // Get listview 
     ListView lv = getListView(); 

     // on seleting single product 
     // launching Edit Product Screen 
     lv.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       // getting values from selected ListItem 
       String pid = ((TextView) view.findViewById(R.id.pid)).getText() 
         .toString(); 

       // Starting new intent 
       Intent in = new Intent(getApplicationContext(), 
         EditProductActivity.class); 
       // sending pid to next activity 
       in.putExtra(TAG_PID, pid); 

       // starting new activity and expecting some response back 
       startActivityForResult(in, 100); 
      } 
     }); 

    } 

    // Response from Edit Product Activity 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     // if result code 100 
     if (resultCode == 100) { 
      // if result code 100 is received 
      // means user edited/deleted product 
      // reload this screen again 
      Intent intent = getIntent(); 
      finish(); 
      startActivity(intent); 
     } 

    } 

    /** 
    * Background Async Task to Load all product by making HTTP Request 
    * */ 
    class LoadAllProducts extends AsyncTask<String, String, String> { 

     /** 
     * Before starting background thread Show Progress Dialog 
     * */ 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(AllProductsActivity.this); 
      pDialog.setMessage("Loading products. Please wait..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(false); 
      pDialog.show(); 
     } 

     /** 
     * getting All products from url 
     * */ 
     protected String doInBackground(String... args) { 
      // Building Parameters 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 

      // getting JSON string from URL 
      JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params); 



      // Check your log cat for JSON reponse 
      Log.d("All Products: ", json.toString()); 

      try { 
       // Checking for SUCCESS TAG 
       int success = json.getInt(TAG_SUCCESS); 

       if (success == 1) { 
        // products found 
        // Getting Array of Products 
        products = json.getJSONArray(TAG_PRODUCTS); 

        // looping through All Products 
        for (int i = 0; i < products.length(); i++) { 
         JSONObject c = products.getJSONObject(i); 

         // Storing each json item in variable 
         String id = c.getString(TAG_PID); 
         String name = c.getString(TAG_NAME); 

         // creating new HashMap 
         HashMap<String, String> map = new HashMap<String, String>(); 

         // adding each child node to HashMap key => value 
         map.put(TAG_PID, id); 
         map.put(TAG_NAME, name); 

         // adding HashList to ArrayList 
         productsList.add(map); 
        } 
       } else { 
        // no products found 
        // Launch Add New product Activity 
        Intent i = new Intent(getApplicationContext(), 
          NewProductActivity.class); 
        // Closing all previous activities 
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        startActivity(i); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

     /** 
     * After completing background task Dismiss the progress dialog 
     * **/ 
     protected void onPostExecute(String file_url) { 
      // dismiss the dialog after getting all products 
      pDialog.dismiss(); 
      // updating UI from Background Thread 
      runOnUiThread(new Runnable() { 
       public void run() { 
        /** 
        * Updating parsed JSON data into ListView 
        * */ 
        ListAdapter adapter = new SimpleAdapter(
          AllProductsActivity.this, productsList, 
          R.layout.list_item, new String[] { TAG_PID, 
            TAG_NAME}, 
          new int[] { R.id.pid, R.id.name }); 
        // updating listview 
        setListAdapter(adapter); 
       } 
      }); 

     } 

    } 
} 
그 라인 실행할 때 문제가 excatly 트리거됩니다

:

// getting JSON string from URL 
    JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params); 

그 코드는 어떻게됩니까? 나는 내가 뭔가 잘못 코딩하고 있다고 생각하지 않습니다. 도움이 필요하십니까?

PHP 파일 :

<?php header('content-type: application/json; charset=utf-8'); 
/* 
* Following code will list all the products 
*/ 

// array for JSON response 
$response = array(); 


// include db connect class 
require_once __DIR__ . '/db_connect.php'; 

// connecting to db 
$db = new DB_CONNECT(); 

// get all products from products table 
$result = mysql_query("SELECT * FROM products") or die(mysql_error()); 

// check for empty result 
if (mysql_num_rows($result) > 0) { 
    // looping through all results 
    // products node 
    $response["products"] = array(); 

    while ($row = mysql_fetch_array($result)) { 
     // temp user array 
     $product = array(); 
     $product["pid"] = $row["pid"]; 
     $product["name"] = $row["name"]; 
     $product["price"] = $row["price"]; 
     $product["description"] = $row["description"]; 
     $product["created_at"] = $row["created_at"]; 
     $product["updated_at"] = $row["updated_at"]; 



     // push single product into final response array 
     array_push($response["products"], $product); 
    } 
    // success 
    $response["success"] = 1; 

    // echoing JSON response 
    echo json_encode($response); 
} else { 
    // no products found 
    $response["success"] = 0; 
    $response["message"] = "No products found"; 

    // echo no users JSON 
    echo json_encode($response); 
} 
?> 
+0

@TheZ : 유효한 json 문자열인지 어떻게 확인할 수 있습니까? 응용 프로그램이 충돌하고 심지어 로그 명령을 등록 할 수 없습니다. – androniennn

+0

오류는 JSON이 아닌 HTML 스펙의 일부인' TheZ

+0

@TheZ :'header ('Content-type : application/json');을 추가했습니다. 성공하지 못했습니다! 나는 5 시간 동안 해결책을 찾기 위해 여기에 글을 남겼다 :/ – androniennn

답변

0

이 줄을 교체하십시오 :이 줄

include('db_connect.php');

과 클래스 :

"http://192.168.1.3/android_connect/get_all_products.php";

와 함께

require_once __DIR__ . '/db_connect.php';

를 :

"http://DOMAIN.COM/android_connect/get_all_products.php";

는이 코드를 테스트하고는이 방법에서 작동합니다.

관련 문제