2014-06-16 2 views
0

나는 가상 데이터베이스 (WAMPSERVER 내가 사용하는)의 세부 사항을 표시 해야하는 안드로이드 애플 리케이션에서 작동하고 새로운 서류. 내가 쇼 세부 정보의 버튼을 누르면 앱이 위의 오류를 표시합니다. 다음은 allproductsactivity.java 파일입니다. 나는 다른 게시물을 보았지만 내 문제를 이해하고 해결할 수는 없습니다. 보안상의 이유로 IP 주소에 x.x.x.x : 80을 넣었습니다.dataorg.json.JSONException 구문 분석 오류 : 값 <! DOCTYPE 유형 java.lang.String의 JSONObject로 변환 할 수 없습니다

AllProductsActivity.java

package com.panos.appphpconnect; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

import org.apache.http.NameValuePair; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.ListActivity; 
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.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 

public class AllProductsActivity extends ListActivity { 




private ProgressDialog pDialog; 

JSONParser jParser=new JSONParser(); 

ArrayList<HashMap<String, String>> productsList; 

// url to get all products list 
private static String url_all_products = "http://x.x.x.x:80/connect/get_all_products.php"; 

// JSON Node names 
private static final String TAG_SUCCESS = "success"; 
private static final String TAG_CLASSES = "classes"; 
private static final String TAG_PID = "_id"; 
private static final String TAG_NAME = "username"; 

// products JSONArray 
JSONArray products = null; 

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

    // 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 _id = ((ListView) view.findViewById(R.id.id)).getAdapter().toString(); 

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

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

} 

@Override 
protected void onDestroy() { 
    // TODO Auto-generated method stub 
    super.onDestroy(); 
    if(pDialog!=null && pDialog.isShowing()){ 
     pDialog.cancel(); 
    } 
} 



/** 
* 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 response 
     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_CLASSES); 

       // 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.id, R.id.name }); 
       // updating listview 
       setListAdapter(adapter); 
      } 
     }); 

    } 

} 
} 

get_all_products.php의 코드는 "오류 구문 분석 내가 내 브라우저에서 파일 get_all_products.php을 실행할 때 또한 다음

<?php 

/* 
* Following code will list all the products 
*/ 

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


// include db connect class 
require("db_connect.php"); 

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

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



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

while ($row = mysql_fetch_array($result)) { 
    // temp user array 
    $classes = array(); 
    $classes["_id"] = $row["_id"]; 
    $classes["username"] = $row["username"]; 
    $classes["password"] = $row["password"]; 


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

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

// echo no users json 
echo json_encode($response); 
} 
?> 

인 나에게 오류를 표시합니다 : 구문 오류, 예기치 않은 T_STRING, C : \ Wamp \ www \ connect \ db_connect.php의 6 행에 T_FUNCTION이 있어야합니다. "하지만 6 행과 어떤 오류인지 이해할 수 없습니다 .db_connect.php 파일의 코드는 다음과 같습니다. 이하. logocat의 모든 오류를의

<?php 
//A class file to connect to database 

class DB_CONNECT{ 

    function_constructor(){ 

    $db = new DB_CONNECT(); 

    //connecting to database 

    $this->connect(); 
    } 

    function_destruct(){ 
    //closing db connection 
    $this->close(); 
    } 

    //Function to connect with database 
    function connect(){ 
      //import database connection variables 
      require_once_DIR_ . '/db_config.php'; 
      //connecting to mysql db 
    $con=mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD) or die(mysql_error()); 
    //selecting database 
    $db=mysql_select_db(DB_DATABASE) or die(mysql_error()); 
    //returning connrction cursor 
    return $con; 
    } 
    //function close to db connection 
    function close(){ 
      //closing db connection 
      mysql_close(); 
      } 
      } 
      ?> 

E/JSON Parser(2234): Error parsing dataorg.json.JSONException: Value <!DOCTYPE of type  java.lang.String cannot be converted to JSONObject 
    W/dalvikvm(2234): threadid=10: thread exiting with uncaught exception (group=0xb4e1e908) 
    E/AndroidRuntime(2234): FATAL EXCEPTION: AsyncTask #1 
    E/AndroidRuntime(2234): java.lang.RuntimeException: An error occured while executing doInBackground() 
    E/AndroidRuntime(2234): at android.os.AsyncTask$3.done(AsyncTask.java:299) 
    E/AndroidRuntime(2234): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
    E/AndroidRuntime(2234): at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
    E/AndroidRuntime(2234): at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
    E/AndroidRuntime(2234): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
    E/AndroidRuntime(2234): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
    E/AndroidRuntime(2234): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
    E/AndroidRuntime(2234): at java.lang.Thread.run(Thread.java:856) 
    E/AndroidRuntime(2234): Caused by: java.lang.NullPointerException 
    E/AndroidRuntime(2234): at com.panos.appphpconnect.AllProductsActivity$LoadAllProducts.doInBackground(AllProductsActivity.java:141) 
    E/AndroidRuntime(2234): at com.panos.appphpconnect.AllProductsActivity$LoadAllProducts.doInBackground(AllProductsActivity.java:1) 
    E/AndroidRuntime(2234): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
    E/AndroidRuntime(2234): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
    E/AndroidRuntime(2234): ... 4 more 
+0

웹 서버에서 보내는 응답이 잘못되었습니다. 응답을 게시 할 수 있습니까? –

+0

라인 6은 'function_constructor'여야합니다. 함수와 _constructor 사이에 공백이 없습니다. 또 다른 이유는 클래스 생성자 내에서 DB_CONNECT 객체를 인스턴스화하는 이유가 무엇입니까? – lelloman

+0

@lelloman "$ db = new DB_CONNECT"를 사용하여 데이터베이스에 연결합니다. 잘못인가? 이제 정확하게 공백을 넣고 "No Database Select"메시지를 보냅니다. – user3636948

답변

0

SELECT *FROM classes입니다 잘못된 구문과 당신은 당신이 얻을, 지금 mysql_query

$result = mysql_query("SELECT * FROM classes", $db) or die(mysql_error()); 

에 대한 연결을 통과하고 안드로이드에 대해 잊지한다 쿼리 할 때 브라우저에서 작업하면 앱에서 파싱을 걱정할 수 있습니다.

+0

PHP 파일에서 문제가 결국 해결됩니다. 이제 브라우저에서 PHP 파일을 실행하면 결과가 다시 전송되지만 응용 프로그램의 오류가 지속됩니다. – user3636948

관련 문제