2012-04-10 11 views
0

私はAndroidプログラミングの初心者であり、送信を取得してローカルホストサーバーから応答を受け取ろうとしているときに次の問題に直面しています。Android Json HTTP Post、データを解析できません

私が最初に起動しようとすると、プログラムは自動的に閉じるようです。しかし、実装後

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

プログラムは実行できますが、データは解析されません。

私はアンドロイドマニフェストスクリプトでインターネット許可を許可しました。ところで

私の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; 
?> 

は、私はオンラインのWebサイトからこれらのコードを得ました。しかし、これらのコードが動作することができれば、私は自分のプロジェクトに実装できるはずです。

答えて

1

メインスレッドでネットワークにアクセスしようとしています。これはvery bad ideaです。別のスレッドでネットワークアクセスを行う必要があります。リンクされた記事はこれを行うためのいくつかのガイドラインを提供します。

ネットワークアクセスを別のスレッドに移動しても問題が解決しない場合は、お気軽に質問をしてください。

(Androidシステムは、それがネットワークトラフィックを待っていたので、それは、しばらくの間、応答しなかった気づいたので、あなたのアプリが殺された理由がある。)

+0

こんにちは、私はそれを実行してみましたfeedback.Actuallyてくれてありがとうそれはまだ動作していませんでした。私はアンドロイドがlocalhostを受け入れていないが、変数を送るためにIPを必要としているというエラーを発見した。 – user1324336

関連する問題