2012-04-10 4 views
0

안드로이드 프로그래밍에 익숙하지 않으므로 불편을 끼쳐 드려 죄송합니다. 보내기를 검색하고 로컬 호스트 서버에서 응답을 받으려고 할 때 다음과 같은 문제가 발생합니다.Android Json HTTP Post, 데이터를 구문 분석 할 수 없습니다.

프로그램을 처음 실행하려고하면 프로그램이 자동으로 닫힌 것처럼 보입니다. 그러나 구현 후

StrictMode.ThreadPolicy policy = new StrictMode. 
ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 

프로그램을 실행할 수 있지만 데이터가 구문 분석되지 않습니다.

내 안드로이드 Manifest 스크립트에서 인터넷 사용 권한을 허용했습니다.

내 Android 코드

package kx.practice; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.StrictMode; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.widget.TextView; 



public class JsonHttpPractice2Activity extends Activity { 

TextView tv; 
String text; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 

StrictMode.ThreadPolicy policy = new StrictMode. 
ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 

tv = (TextView)findViewById(R.id.textView1); 
text = ""; 

try { 
postData(); 
} catch (JSONException e) { 
// TODO Auto-generated catch block 
System.out.println("Error in JSON Exception 1"); 
e.printStackTrace(); 
} 
} 

public void postData() throws JSONException{ 
// Create a new HttpClient and Post Header 
HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost("http://localhost/phpWebservice/AndroidTest.php"); 
JSONObject json = new JSONObject(); 

try { 
// JSON data: 
json.put("name", "Fahmi Rahman"); 
json.put("position", "sysdev"); 

JSONArray postjson=new JSONArray(); 
postjson.put(json); 

// Post the data: 
httppost.setHeader("json",json.toString()); 
httppost.getParams().setParameter("jsonpost",postjson); 

// Execute HTTP Post Request 
System.out.print(json); 
HttpResponse response = httpclient.execute(httppost); 

// for JSON: 
if(response != null) 
{ 
InputStream is = response.getEntity().getContent(); 

BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
StringBuilder sb = new StringBuilder(); 

String line = null; 
try { 
while ((line = reader.readLine()) != null) { 
sb.append(line + "\n"); 
} 
} catch (IOException e) { 
e.printStackTrace(); 
} finally { 
try { 
is.close(); 
} catch (IOException e) { 
e.printStackTrace(); 
} 
} 
text = sb.toString(); 
System.out.println("This is my text" +text); 
} 

tv.setText(text); 

}catch (ClientProtocolException e) { 
System.out.println("Error in JSON Exception 2"); 
// TODO Auto-generated catch block 
} catch (IOException e) { 
System.out.println("Error in JSON Exception 3"); 
// TODO Auto-generated catch block 
} 
} 
} 

그리고 마지막으로, 내 PHP 코드 그런데
<?php 
$json = $_SERVER['HTTP_JSON']; 
echo "JSON: \n"; 
echo "--------------\n"; 
var_dump($json); 
echo "\n\n"; 

$data = json_decode($json); 
echo "Array: \n"; 
echo "--------------\n"; 
var_dump($data); 
echo "\n\n"; 

$name = $data->name; 
$pos = $data->position; 
echo "Result: \n"; 
echo "--------------\n"; 
echo "Name  : ".$name."\n Position : ".$pos; 
?> 

, 나는 온라인 웹 사이트에서이 코드를 얻었다. 그러나 이러한 코드가 작동 할 수 있다면 프로젝트에 구현할 수 있어야합니다.

답변

1

주 스레드에서 네트워크에 액세스하려고합니다. 이것은 very bad idea입니다. 별도의 스레드에서 네트워크 액세스를 수행해야합니다. 링크 된 기사는이를 수행하기위한 몇 가지 지침을 제공합니다.

다른 스레드로 네트워크 액세스를 이동 한 후에도 여전히 문제가 발생하면 언제든지 돌아와서 질문하십시오.

(안드로이드 시스템이 네트워크 트래픽을 기다리고 이후는, 잠시 동안 응답하지 않았다. 눈치 때문에 앱이 살해 된 이유는)

+0

안녕, 내가 그것을 실행 시도 feedback.Actually에 대한 감사 다른 스레드에 있지만 여전히 작동하지 않았습니다. 나는 그것이 안드로이드가 localhost를 받아 들일 수는 없지만 변수를 보낼 IP가 필요하다는 것을 알아 낸 오류를 발견했다. 감사합니다 =) – user1324336

관련 문제