Android httpclient.execute выдает исключение на эмуляторе - PullRequest
1 голос
/ 19 февраля 2012

Я пытаюсь подключиться к веб-странице с httppost. Но приведенный ниже код вызывает исключение, начиная с httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));.

Я перепробовал все комбинации, но не смог найти проблемы с ним. Как я могу отладить это? Я довольно новичок в мире Android + Java.

Edit: Чтобы избежать каких-либо проблем, я просто следовал приведенному здесь примеру.

http://www.vogella.de/articles/AndroidNetworking/article.html

в 4-м разделе. Но это все равно дает ту же ошибку. Кто-нибудь может помочь? Благодарю.

Редактировать Конец

package com.example.row;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

import java.util.ArrayList;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpEntity;
import java.io.InputStream;
import android.widget.TextView;
import org.apache.http.util.EntityUtils;


public class mcrow3 extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        String result = "MC";
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);
        nameValuePairs.add(new BasicNameValuePair("myusername","user"));
        nameValuePairs.add(new BasicNameValuePair("mypassword","pwd"));
        TextView tv = new TextView(this);
        try
        {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://example.com/login.php");
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        result = EntityUtils.toString(entity);
        }
        catch(Exception e)
        {
            tv.setText("Some problem");
            setContentView(tv);
        }

        tv.setText(result);
        setContentView(tv);
    }
}

Пожалуйста, дайте мне знать, если я что-то делаю неправильно. При установке его на эмуляторе говорится, что приложение к сожалению остановлено. Я пропускаю какие-либо настройки на эмуляторе? Интернет-соединение моего эмулятора работает в браузере.

Edit: Найдите скрипт PHP на стороне сервера:

<?php

$host="host"; // Host name
$username="user"; // Mysql username
$password="pwd"; // Mysql password
$db_name="db"; // Database name
$tbl_name="users"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql="SELECT * FROM $tbl_name WHERE emailid='$myusername' and password='$mypassword'";
while($e=mysql_fetch_assoc($sql))
        $output[]=$e;

print(json_encode($output));
mysql_close();
?>

Ответы [ 2 ]

1 голос
/ 19 февраля 2012

Хотя сущность httppost установлена ​​как URLEncodedFormEntity, может также потребоваться указать в качестве типа содержимого заголовка http: Content-Type: application / x-www-form-urlencoded.

А также это может бытьпотому что вы делаете сетевой вызов в том же потоке, что и пользовательский интерфейс.

0 голосов
/ 19 февраля 2012

установите ваши параметры и разместите объект, как показано ниже:

String jsonParam = null;
try{
    JSONObject param = new JSONObject();
    param.put("myusername", "user");
    param.put("mypassword", "pwd");
    //and so on with other parameters

    jsonParam = param.toString();
}
catch (Exception e) {
    // TODO: handle exception
}

httppost.setEntity(new StringEntity(jsonParam, HTTP.UTF_8));
...