0

とりあえずAndroidエミュレータをローカルコンピュータに接続しています。PHPに接続し、実行するIPアドレスを送信します。次に、JSONの結果をエコーし​​ます。結果を印刷したいのですが、Androidの画面を変更するのに問題があります。

これが私の活動です:

public class MainActivity extends Activity implements OnClickListener {

EditText ipAddress;
Button bSearch;

String IP;

HttpClient httpclient;

HttpPost httppost;

ArrayList<NameValuePair> nameValuePairs;

HttpResponse response;
HttpEntity entity;


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

    initialize();
    }

private void initialize(){
    ipAddress = (EditText) findViewById(R.id.IPaddress);
    bSearch = (Button) findViewById(R.id.searchBtn);

    bSearch.setOnClickListener((OnClickListener) this);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

@Override
public void onClick(View arg0) {
    // TODO Auto-generated method stub

    httpclient = new DefaultHttpClient();

    httppost = new HttpPost("http://127.0.0.1/myfiles/WorkingVersionVJSON.php");

    IP = ipAddress.getText().toString();

    nameValuePairs = new ArrayList<NameValuePair>();

    nameValuePairs.add(new BasicNameValuePair("ipaddress", IP));

    try{
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        response = httpclient.execute(httppost);

        if(response.getStatusLine().getStatusCode()==200){

            entity = response.getEntity();

            if(entity != null){

                InputStream instream = entity.getContent();

                JSONObject jsonResponse = new JSONObject(convertStreamToString(instream));

                String rIP = jsonResponse.getString("ipaddress");

            }
        }
    }catch(Exception e){
        e.printStackTrace();
    }
}

 private static String convertStreamToString(InputStream is) {
        /*
         * To convert the InputStream to String we use the BufferedReader.readLine()
         * method. We iterate until the BufferedReader return null which means
         * there's no more data to read. Each line will appended to a StringBuilder
         * and returned as String.
         */
        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();
            }
        }
        return sb.toString();
    }
}

そしてPHP

<?php



 require("IPQFunctionworkingversionV7.php");
$ipaddress = $_POST["ipaddress"];

$results = array();

$results = getScore($ipaddress);
echo json_encode($results);
?>

PHPは、ブラウザーで実行し、htmlを使用して投稿すると機能します。私はその線が

nameValuePairs.add(new BasicNameValuePair("ipaddress", IP));

IPはAndroidのテキストボックスに入力されたものである必要があり、PHPのPOSTと一致するため、同じ方法でphpに投稿します。

アクティビティはコンパイルされてエミュレータ上にあるので、接続は成功したと思います。画面に表示できるようにJSON応答を解析する必要があります。それができたら、レイアウトに取り組みます。

4

1 に答える 1

1

また、onClickにあるコードは、実際にはAsyncTaskに配置する必要があります。OnClickはUIスレッドから呼び出されます。そのネットワーク呼び出し(長さは不定)に時間がかかりすぎると、Androidはアプリが応答しないことをユーザーに通知します。

画面に文字列を表示するには、レイアウトで、findViewByIdを使用して取得できるTextViewを定義し、プログラムで1つを膨らませて表示に追加することにより、setTextを呼び出す必要があります。

于 2012-07-11T16:35:11.573 に答える