2012-04-06 3 views
0

Hello Frnds Это код, который я использую с Xcode для iPhone и получаю ответ правильно, но проблема в том, что я использую тот же url и тот же json для разработки Android, я получаю: -Parsing JSON Проблема для Android

{"code":"400","message":"Failed loading JSON. Special characters must not be included in the request. Please check the requested JSON."} 

Я думаю, что это любая незначительная техническая проблема, которую я не нахожу. Я новичок в развитии Android. Я пробовал 1000 раз за последние 15 дней и получаю разочарование. :-(:-(:-(:-(:-(:-(:-(:-( Может ли кто-нибудь предоставить мне полное решение с полным кодом для Android. Я буду очень признателен вам .

код для iPhone является:

NSURL *url = [NSURL URLWithString:@"http://www.invoicera.com/app/api/check_json_api.php?token=7B92C122473A3D6F54E60D20AC5526D0"]; 


NSString *jsonRequest = [NSString stringWithFormat:@"&json_data=%@",[[NSString stringWithFormat:@"{\"listInvoice\":{\"client_id\":\"\",\"date_from\":\"\",\"date_to\":\"\",\"invoice_number\":\"\",\"invoice_record_status\":\"\",\"invoice_status\":\"\",\"page\":\"1\",\"per_page_record\":\"20\"}}"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 

NSLog(@"%@",jsonRequest); 

NSData *json_data = [NSData dataWithBytes:[jsonRequest UTF8String] length:[jsonRequest length]]; 

NSLog(@"%@",json_data); 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 


[request setHTTPMethod:@"POST"]; 
[request setHTTPBody: json_data]; 
NSLog(@"%@",json_data); 
// [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
//[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[request setValue:[NSString stringWithFormat:@"%d", [json_data length]] forHTTPHeaderField:@"Content-Length"]; 
[request setHTTPBody:[[jsonRequest stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding] 
         dataUsingEncoding:NSUTF8StringEncoding 
         allowLossyConversion:YES]]; 

// [NSURLConnection connectionWithRequest: [запрос autorelease] делегат: автономный];

NSURLConnection *nsUrlConnection=[[NSURLConnection alloc] 
            initWithRequest:request 
            delegate:self]; 

// Successful connection. 
if (nsUrlConnection) { 

    // [self initSpinner]; 
    // [self spinBegin]; 

    NSMutableData *data = [[NSMutableData alloc] init]; 
    self.receivedData=data; 
    [data release]; 
} 
// Unsuccessful connection. 
else { 

} 
// Clean up 
[url release]; 
[request release]; 

После написания этого кода я ма получить идеальный ответ с сервера. Но как я могу получить тот же ответ от сервера для разработки Android. te с полным кодом android.

{"@attributes":{"status":"200"},"invoices":{"@attributes":{"page":"1","per_page_record":"20","total_pages":"13","total_records":"246"},"invoice":[{"client":{"client_id":"421","organization":"max styles","address":"H-189,Vasundhara","billing_address":{"street":"H-189,Vasundhara","city":{},"state":{},"zip":........................etc etc etc. 

Это андроид Код:

public class JSONParser { 

    String s1 = "{\"listInvoice\":{\"client_id\":\"\",\"date_from\":\"\",\"date_to\":\"\",\"invoice_number\":\"\",\"invoice_record_status\":\"\",\"invoice_status\":\"\",\"page\":\"1\",\"per_page_record\":\"20\"}}"; 

    public String payload; 

    public JSONParser(String[]array) { 
     this.payload = null; 
    } 

    public void excuteHttpPost() throws Exception { 
     BufferedReader in = null; 

     try { 
      // Creating HTTP client 
      JSONObject listobj = new JSONObject(); 
      JSONObject listInvoice = new JSONObject(); 
      listInvoice.put("client_id",""); 
      listInvoice.put("date_from",""); 
      listInvoice.put("date_to",""); 
      listInvoice.put("invoice_number",""); 
      listInvoice.put("invoice_record_status",""); 
      listInvoice.put("invoice_status",""); 
      listInvoice.put("page","1"); 
      listInvoice.put("per_page_record","10"); 
      listobj.put("listInvoice", listInvoice); 

      HttpClient client = new DefaultHttpClient(); 
      HttpPost request = new HttpPost(ConstantList.invoicelistURL); 

      List<NameValuePair> postParameters = new ArrayList<NameValuePair>(1); 
      postParameters.add(new BasicNameValuePair("json_data", s1)); 

      Log.d("Http Response:", postParameters.toString()); 

      // Build JSON string 

      request.setHeader("Content-type", "application/x-www-form-urlencoded"); 
      request.setEntity(new UrlEncodedFormEntity(postParameters)); 
      HttpResponse response = client.execute(request); 

      // writing response to log 
      Log.d("Http Response:", response.toString()); 
      in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 

      StringBuffer sb = new StringBuffer(""); 
      String line = ""; 
      String NL = System.getProperty("line.separator"); 
      while ((line = in.readLine()) != null) { 
       sb.append(line+NL); 
      } 
      in.close(); 
      payload = sb.toString(); 

     } finally { 
      if (in != null) { 
       try { 
        in.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 
+0

Ваш вопрос будет намного легче ответить, если вы вывесили свои усилия в Android вместо него. Таким образом, мы могли бы указать на одну или две ошибки, а не на гораздо более высокий уровень написания кода для вас. –

+0

@ Paul-Jan У меня есть обновленный код для Android, пожалуйста, найдите полное окончательное решение для моего кода. Я очень расстроен :-( –

ответ

0

Проблема заключается в том, что вы не используете JSONObject listobj в запросе на всех, вы добавляете s1 размещать параметры вместо. Используйте этот код:

postParameters.add(new BasicNameValuePair("json_data", listobj.toString())); 

Кроме того, положить целые значения JSONObject явно: listInvoice.put("page", 1); вместо listInvoice.put("page", "1");